【问题标题】:Set the size of Main View according to its subView根据其子视图设置主视图的大小
【发布时间】:2013-09-20 14:45:45
【问题描述】:

我有一个带框架的主视图

0、60、768、1024、

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

假设图像大小为 100,100。当我按下按钮时,我应该如何设置我的主视图的Bounds/fRAME?或者换句话说,我怎样才能得到UIImageView相对于self.view的框架

【问题讨论】:

  • 你的意思是frame是(0, 60, 768, 1024)?
  • 是的,它的框架。我已经修好了
  • 不如,拍摄整个主视图的图像,然后裁剪图像?

标签: iphone ios objective-c


【解决方案1】:

不要改变主视图的框架,而是尝试计算UIImageView的坐标。

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

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

【讨论】:

  • UIView 实现了 convertRect:toView 和 ...fromView:,这就是在这里实现你的想法的方法,尽管我不明白这(或 OP 重新构建超级视图的假设)如何工作。
  • @danh 事实上,我的目的是帮助计算像你这样的方法所需的矩形。我想,我应该更明确一点。谢谢你的回答。
【解决方案2】:

一种方法是抓取整个视图的图像,然后对其进行裁剪。无需重构。结合来自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];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多