根据子视图设置主视图的大小

时间:2013-09-20 14:45:45

标签: iphone ios objective-c

我有一个带框架的主视图

0,60,768,1024,

它有很多视图作为subView。第一个子视图是UIImageView。与ImageView关联的属性是AspectFit。现在我想截取屏幕的唯一部分截图UIImageView(至少有4-5个子视图可以或者不能超过这个UIImageView)iPhone提供的标准编码已经在这里使用了。我得到的图像是主视图。现在只获取UIImageView的屏幕截图以及上面的内容,我需要设置主视图的尺寸以仅包围UIImageView。

假设图像大小为100,100。当我按下按钮时,我该如何设置myView的Bounds/fRAME?或者换句话说,如何获得UIImageView相对于self.view

的框架

2 个答案:

答案 0 :(得分:0)

尝试计算UIImageView的坐标。

,而不是更改主视图的框架

假设主视图和图像视图的帧分别为(0,60,768,1024)和(20,20,100,100)。

因此,相对于全局坐标系的图像视图的帧是(20,80,100,100)。只需将主视图的x,y坐标添加到其子视图即可实现此目的。然后,您可以获得所需帧的屏幕截图。

答案 1 :(得分:0)

一种方法是抓取整个视图的图像,然后裁剪它。不需要重构。结合herehere的最佳答案,它可能如下所示:

- (UIImage *)imageWithView:(UIView *)view croppedBy:(CGRect)rect {

    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], rect);
    UIImage *result = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef);
    return result;
}

对于您的应用,请像这样调用它(假设我们在视图控制器中):

UIImage *justMyImageView = [self imageWithView:self.view croppedBy:self.myImageView.frame];