将框架放在UIImage上不起作用

时间:2016-02-23 01:38:06

标签: ios cocoa-touch uiimageview uiimage cgrect

我有一个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];

2 个答案:

答案 0 :(得分:2)

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

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

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

以框架为例 enter image description here

并注意它与边界概念的区别 enter image description here

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);