我有一个UIView需要放在特定坐标的UIImageView内的UIImage上。框架的坐标从左上角开始引用,并具有与原始图像相对应的指定宽度和高度。
所以,为了制作框架,我首先使用以下帖子中的类别获取图像的CGRect:UIImage size in UIImageView
然后我得到一个缩放因子来缩小框架的大小,取原始高度,除以缩放高度,然后将所有值除以。
最后,我拍摄图像CGRect并添加帧的缩放位置值以获取视图的最终CGRect。但是,框架始终位于所需位置的右侧。谁能看到我做错了什么?
这是代码(new只是一个具有正确帧参数的自定义对象):
CGRect imageBounds = [self.imageView displayedImageBounds];
float scaleFactor = AppDelegate.usedImage.size.height / imageBounds.size.height;
new.height /= scaleFactor;
new.width /= scaleFactor;
new.positionX /= scaleFactor;
new.positionY /= scaleFactor;
UIView *faceRectView = [[UIView alloc] init];
faceRectView.tag = idx;
faceRectView.backgroundColor = [UIColor whiteColor];
faceRectView.frame = CGRectMake((imageBounds.origin.x + new.positionX), (imageBounds.origin.y + new.positionY), new.width, new.height);
[self.view addSubview:faceRectView];
答案 0 :(得分:2)
CGPoint是一种C结构,用于定义坐标系中的点。此坐标系的原点位于iOS的左上角和OS X的左下角。换句话说,其垂直轴的方向在iOS和OS X上有所不同。
CGSize是另一个定义宽度和高度值的简单C结构,CGRect有一个原始字段,一个CGPoint和一个大小字段,一个CGSize。原点和大小字段一起定义矩形的位置和大小。
在iOS和OS X上,应用程序具有多个坐标系。例如,在iOS上,应用程序的窗口位于屏幕的坐标系中,窗口的每个子视图都位于窗口的坐标系中。换句话说,视图的子视图始终位于视图的坐标系中。
CGGeometry Reference是一组结构,常量和函数,可以更轻松地处理坐标和矩形。您可能遇到过与此类似的代码段:
CGPoint point = CGPointMake(self.view.frame.origin.x + self.view.frame.size.width,self.view.frame.origin.y + self.view.frame.size.height ); 强>
这段代码不仅难以阅读,而且还非常冗长。我们可以使用CGGeometry Reference中定义的两个方便函数重写此代码片段。
CGRect frame = self.view.frame; CGPoint point = CGPointMake(CGRectGetMaxX(frame),CGRectGetMaxY(frame));
为了简化上面的代码片段,我们将视图的框架存储在名为frame的变量中,并使用CGRectGetMaxX和CGRectGetMaxY。这些函数的名称是不言自明的。
CGGeometry Reference定义函数,以返回矩形的x坐标和y坐标的最小值和最大值,以及位于矩形中心的x坐标和y坐标。另外两个方便的getter函数是CGRectGetWidth和CGRectGetHeight。
最后总结一下,查看 CGRectMake 的实现。
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
{
CGRect rect;
rect.origin.x = x; rect.origin.y = y;
rect.size.width = width; rect.size.height = height;
return rect;
}
答案 1 :(得分:1)
你可以添加喜欢那个
faceRectView.frame = CGRectMake((0.0), (0.0), new.width, new.height);