gpt4 book ai didi

ios - 将框架放在 UIImage 上不起作用

转载 作者:行者123 更新时间:2023-12-01 18:46:13 26 4
gpt4 key购买 nike

我有一个 UIView 需要放置在 UIImageView 内特定坐标的 UIImage 上。框架的坐标是从左上角引用的,并且具有从原始图像引用的指定宽度和高度。

因此,为了制作框架,我首先使用以下帖子中的类别获取图像的 CGRect:UIImage size in UIImageView

然后我得到一个比例因子来缩小框架的大小,方法是取原始高度,除以缩放高度,然后除以我的所有值。

最后,我获取图像 CGRect 并添加帧的缩放位置值以获得 View 的最终 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];

最佳答案

CGPoint 是一种 C 结构,用于定义坐标系中的一个点。这个坐标系的原点在 iOS 的左上角和 OS X 的左下角。换句话说,它的垂直轴的方向在 iOS 和 OS X 上是不同的。

CGSize 是另一个简单的 C 结构,它定义了宽度和高度值,而 CGRect 有一个原点字段,一个 CGPoint,和一个大小字段,一个 CGSize。 origin 和 size 字段一起定义了矩形的位置和大小。

在 iOS 和 OS X 上,一个应用程序有多个坐标系。例如,在 iOS 上,应用程序的窗口位于屏幕的坐标系中,并且窗口的每个 subview 都位于窗口的坐标系中。换句话说, View 的 subview 始终位于 View 的坐标系中。

以这个框架为例
enter image description here

并注意它与边界概念的不同之处
enter image description here

CGGeometry Reference 是结构、常量和函数的集合,可以更轻松地使用坐标和矩形。您可能遇到过类似这样的代码片段:

CGPoint 点 = 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 点 = CGPointMake(CGRectGetMaxX(frame), CGRectGetMaxY(frame));


为了简化上面的代码片段,我们将 View 的框架存储在一个名为 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;
}

关于ios - 将框架放在 UIImage 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35567233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com