将框架放在 UIImage 上不起作用
Place frame over UIImage not working
我有一个 UIView 需要放置在 UIImageView 内部的 UIImage 上的特定坐标处。框架的坐标是从左上角引用的,并且具有从原始图像引用的指定宽度和高度。
因此,为了制作框架,我首先使用以下 post 中的类别获取图像的 CGRect:UIImage size in UIImageView
然后我得到一个比例因子来缩小框架的大小,方法是取原始高度,将其除以缩放后的高度,然后将我的所有值除以它。
最后,我获取图像 CGRect 并添加帧的缩放位置值以获得视图的最终 CGRect。但是,框架始终位于所需位置的上方和右侧。谁能看出我做错了什么?
这是代码(新的只是一个具有正确框架参数的自定义对象):
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];
你能这样加吗
faceRectView.frame = CGRectMake((0.0), (0.0), new.width, new.height);
CGPoint 是一个 C 结构,用于定义坐标系中的一个点。这个坐标系的原点在iOS的左上角和OSX的左下角。也就是说,它的纵轴方向在iOS和OS X.
CGSize 是另一个简单的 C 结构,它定义了宽度和高度值,CGRect 有一个原始字段,一个 CGPoint 和一个大小字段,一个 CGSize。 origin 和 size 字段一起定义矩形的位置和大小。
在iOS和OSX上,一个应用程序有多个坐标系。例如,在 iOS 上,应用程序的 window 位于屏幕坐标系中,window 的每个子视图位于 window 的坐标系中。换句话说,视图的子视图总是位于视图的坐标系中。
以这个框架为例
并注意它与边界概念的不同之处
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 参考中定义的两个方便的函数重写此代码片段。
CGRect frame = self.view.frame;
CGPoint 点 = CGPointMake(CGRectGetMaxX(frame), CGRectGetMaxY(frame));
为了简化上面的代码片段,我们将视图的框架存储在一个名为 frame 的变量中,并使用 CGRectGetMaxX 和 CGRectGetMaxY。函数的名称是 self-explanatory.
CGGeometry Reference 将函数定义为 return 矩形的 x- 和 y-coordinates 的最小值和最大值以及位于矩形处的 x- 和 y-coordinates矩形的中心。另外两个方便的 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;
}
我有一个 UIView 需要放置在 UIImageView 内部的 UIImage 上的特定坐标处。框架的坐标是从左上角引用的,并且具有从原始图像引用的指定宽度和高度。
因此,为了制作框架,我首先使用以下 post 中的类别获取图像的 CGRect:UIImage size in UIImageView
然后我得到一个比例因子来缩小框架的大小,方法是取原始高度,将其除以缩放后的高度,然后将我的所有值除以它。
最后,我获取图像 CGRect 并添加帧的缩放位置值以获得视图的最终 CGRect。但是,框架始终位于所需位置的上方和右侧。谁能看出我做错了什么?
这是代码(新的只是一个具有正确框架参数的自定义对象):
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];
你能这样加吗
faceRectView.frame = CGRectMake((0.0), (0.0), new.width, new.height);
CGPoint 是一个 C 结构,用于定义坐标系中的一个点。这个坐标系的原点在iOS的左上角和OSX的左下角。也就是说,它的纵轴方向在iOS和OS X.
CGSize 是另一个简单的 C 结构,它定义了宽度和高度值,CGRect 有一个原始字段,一个 CGPoint 和一个大小字段,一个 CGSize。 origin 和 size 字段一起定义矩形的位置和大小。
在iOS和OSX上,一个应用程序有多个坐标系。例如,在 iOS 上,应用程序的 window 位于屏幕坐标系中,window 的每个子视图位于 window 的坐标系中。换句话说,视图的子视图总是位于视图的坐标系中。
以这个框架为例
并注意它与边界概念的不同之处
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 参考中定义的两个方便的函数重写此代码片段。
CGRect frame = self.view.frame; CGPoint 点 = CGPointMake(CGRectGetMaxX(frame), CGRectGetMaxY(frame));
为了简化上面的代码片段,我们将视图的框架存储在一个名为 frame 的变量中,并使用 CGRectGetMaxX 和 CGRectGetMaxY。函数的名称是 self-explanatory.
CGGeometry Reference 将函数定义为 return 矩形的 x- 和 y-coordinates 的最小值和最大值以及位于矩形处的 x- 和 y-coordinates矩形的中心。另外两个方便的 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;
}