我正在创建一个UIImageView并将它添加到我的视图循环中,我将初始帧设置为0,0,1,47并且循环的每个段落我改变图像视图的中心以将它们分开。
我总是使用0作为origin.y
问题是原点引用位于图像视图的中心,假设我们在界面构建器中,这相当于下面的图像。
如何更改代码中的参考点?
答案 0 :(得分:44)
在阅读完这些答案和你的评论后,我不确定你的观点是什么。
使用UIView
,您可以通过2种方式设置位置:
center
- 肯定说它是中心。frame.origin
- 左上角,无法直接设置。如果您希望左下角位于x = 300,y = 300,您可以这样做:
UIView *view = ...
CGRect frame = view.frame;
frame.origin.x = 300 - frame.size.width;
frame.origin.y = 300 - frame.size.height;
view.frame = frame;
但是,如果你更深入到CALayers
的魔法世界(不要忘记导入QuartzCore),你就会更强大。
CALayer
有以下内容:
position
- 你看,它没有明确地说'中心',所以它可能不是中心!anchorPoint
- CGPoint
,其值在范围0..1(包括)中,指定内部视图。默认值为x = 0.5,y = 0.5表示“中心”(并且-[UIView center]
采用此值)。您可以将其设置为任何其他值,position
属性将应用于该点。示例时间:
view.layer.anchorPoint = CGPointMake(1, 1);
view.layer.position = CGPointMake(300, 300);
注意:旋转图层/视图时,它将围绕anchorPoint
旋转,默认为中心。
Bu因为你只是要求 HOW 来做特定的事情,而不是你想要实现的 WHAT ,我现在无法帮助你。
答案 1 :(得分:8)
对象的框架包括其在superview中的位置。您可以使用以下内容进行更改:
CGRect frame = self.imageView.frame;
frame.origin.y = 0.0f;
self.imageView.frame = frame;
答案 2 :(得分:2)
如果我理解正确,您需要设置您感兴趣的图像视图的框架。这可以通过以下简单的方式完成:
_theImageView.frame = CGRectMake(x, y, width, height);
显然你需要自己设置x,y,width和height。另请注意,视图的框架是参考其父视图。因此,如果您的视图位于左上角(x = 0,y = 0),并且是320点宽和400点高,并且您将图像视图的帧设置为(10,50, 100,50)然后将其添加为前一个视图的子视图,它将位于父视图坐标空间的x = 10,y = 50,即使图像视图的边界是x = 0,y = 0 。边界是参考视图本身,框架是指父母。
因此,在您的方案中,您的代码可能如下所示:
CGRect currentFrame = _theImageView.frame;
currentFrame.origin.x = 0;
currentFrame.origin.y = 0;
_theImageView.frame = currentFrame;
[_parentView addSubview:_theImageView];
或者,您可以说:
CGRect currentFrame = _theImageView.frame;
_theImageView.frame = CGRectMake(0, 0, currentFrame.size.width, currentFrame.size.height);
[_parentView addSubview:_theImageView];
任何一种方法都会将图像视图设置为您添加到其中的父级的左上角。
答案 3 :(得分:0)
我以为我会在Swift中削减这一点。
如果要通过在X和Y中为该视图指定原点的坐标来设置屏幕上的视图位置,只需一点数学运算,我们就可以确定视图中心应位于以便根据需要定位框架的原点。
此扩展程序使用视图框架获取宽度和高度。
计算新中心的公式几乎是微不足道的。参见下面的扩展名:
extension CGRect {
// Created 12/16/2020 by Michael Kucinski for anyone to reuse as desired
func getCenterWhichPlacesFrameOriginAtSpecified_X_and_Y_Coordinates(x_Position: CGFloat, y_Position: CGFloat) -> CGPoint
{
// self is the CGRect
let widthDividedBy2 = self.width / 2
let heightDividedBy2 = self.height / 2
// Calculate where the center needs to be to place the origin at the specified x and y position
let desiredCenter_X = x_Position + widthDividedBy2
let desiredCenter_Y = y_Position + heightDividedBy2
let calculatedCenter : CGPoint = CGPoint(x: desiredCenter_X, y: desiredCenter_Y)
return calculatedCenter // Using this point as the center will place the origin at the specified X and Y coordinates
}
}
如下所示将原点放置在左上角区域:25像素:
// Set the origin for this object at the values specified
maskChoosingSlider.center = maskChoosingSlider.frame.getCenterWhichPlacesFrameOriginAtSpecified_X_and_Y_Coordinates(x_Position: 25, y_Position: 25)
如果您想将CGPoint而不是X和Y坐标传递给扩展名,则可以轻松进行更改。