【问题标题】:iOS SDK - Partial Screenshot? [duplicate]iOS SDK - 部分截图? [复制]
【发布时间】:2013-03-20 06:43:20
【问题描述】:

如何截取 iPad/iPhone 应用程序的屏幕截图并将其限制在“UIImageView A”范围内,但还要让屏幕截图包含恰好位于“UIImageView A”顶部的任何控件(UIImageView 或 UILabel) ?标准显示器与视网膜显示器时会乱吗?

提前致谢!

【问题讨论】:

  • 我有一个答案,然后我做了更多的研究,发现你的问题已经被问到并回答了in this duplicate question
  • 我已经尝试了我找到的所有东西......但它从未捕获“UIImageViewA”之上的控件,如果不添加 B 作为子视图,我该如何做到这一点?
  • B 和 A 是 self.view 的孩子......
  • 但是你仍然可以得到A的框架矩形坐标,是吗?

标签: iphone objective-c ipad


【解决方案1】:

另一个想法是简单地以老式方式截取屏幕截图,例如see the answer in this related question 然后将其裁剪到“A” UIView 的框架矩形。

【讨论】:

    【解决方案2】:

    你需要一个封闭的视图,因为 UIImageView 不打算有子视图。将您想要捕获的所有内容放在该封闭视图中(一个简单的 UIView 就可以了)。下面是一个非常简单的实现,它忽略了视图转换之类的东西:

    // Helper function, calls drawRect: recursively
    void drawViewAndSubviews (UIView* view) {
      [view drawRect:view.bounds];
      CGContextRef ctx = UIGraphicsGetCurrentContext();
      for (UIView* subview in view.subviews) {
        CGPoint origin = subview.frame.origin;
        CGContextTranslateCTM(ctx, origin.x, origin.y);
        drawViewAndSubviews(subview);
        CGContextTranslateCTM(ctx, -origin.x, -origin.y);
      }
    }
    
    - (void)takeScreenshot:(UIView *)view {
      UIGraphicsBeginImageContext(view.bounds.size);
      drawViewAndSubviews(view);
      UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
      UIGraphicsEndImageContext();
      // Now 'image' has a snapshot of 'view' and its subviews
    }
    

    【讨论】:

    • 哇,这帮了很多忙。知道为什么图像会是单色的吗?
    • 不知道。在发布之前,我编写了一个测试应用程序来试用此代码,它对我来说效果很好。你在 takeScreenshot: 方法中使用什么类视图?
    • 我正在使用 self.view ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    相关资源
    最近更新 更多