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

Iphone 根据主视图的子视图设置主视图的大小,iphone,ios,objective-c,Iphone,Ios,Objective C,我有一个框架的主视图 0,607681024 它有许多视图作为子视图。第一个子视图是一个UIImageView。与ImageView关联的属性是AspectFit。现在我想截取屏幕上唯一一部分的屏幕截图,它限定了UIImageView(至少有4-5个子视图可以或不能位于此UIImageView之上)这里使用了iPhone提供的标准编码。我得到的图像是主视图。现在,为了只获取UIImageView的屏幕截图以及上面的内容,我需要将主视图的维度设置为仅包含UIImageView 假设图像大小为100

我有一个框架的主视图

0,607681024

它有许多视图作为子视图。第一个子视图是一个
UIImageView
。与ImageView关联的属性是AspectFit。现在我想截取屏幕上唯一一部分的屏幕截图,它限定了
UIImageView
(至少有4-5个子视图可以或不能位于此UIImageView之上)这里使用了iPhone提供的标准编码。我得到的图像是主视图。现在,为了只获取UIImageView的屏幕截图以及上面的内容,我需要将主视图的维度设置为仅包含UIImageView


假设图像大小为100100。当我按下按钮时,我应该如何设置主视图的
Bounds/fRAME
?或者换句话说,我如何获得相对于self.view的
UIImageView
的帧,而不是更改主视图的帧,尝试计算
UIImageView
的坐标

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


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

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

- (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;
}
对于您的应用程序,按如下方式调用它(假设我们在视图控制器中):


你是说它是
是(0,607681024)?啊,是的,它的帧。我已经修正了它,取而代之的是,拍摄整个主视图的图像,然后裁剪图像?UIView实现了convertRect:toView和…fromView:,这就是如何在这里实现您的想法,尽管我不知道这(或OP关于重新构造superview的假设)是如何工作的。@danh事实上,我的目的是帮助计算像您这样的方法所需的rect。我想,我应该说得更清楚些。谢谢你的回答。
UIImage *justMyImageView = [self imageWithView:self.view croppedBy:self.myImageView.frame];