iphone – 我如何欺骗[CALayer renderInContext:]只渲染图层的一部分?

iphone – 我如何欺骗[CALayer renderInContext:]只渲染图层的一部分?,第1张

概述我很清楚,除了渲染整个视图和裁剪之外,还没有一种很好的方法来将UIView的一小部分呈现给图像. (在像iPad 3这样的图像非常昂贵的地方,图像巨大).有关renderInContext方法的描述,请参见 here(没有其他选择). 我想要渲染的部分视图是不能预先确定的,这意味着我不能将小部分的视图层次结构设置为自己的UIView(因此是CALayer). 我的想法… 我有一个想法,但如果我要成 我很清楚,除了渲染整个视图和裁剪之外,还没有一种很好的方法来将UIVIEw的一小部分呈现给图像. (在像iPad 3这样的图像非常昂贵的地方,图像巨大).有关renderInContext方法的描述,请参见 here(没有其他选择).

我想要渲染的部分视图是不能预先确定的,这意味着我不能将小部分的视图层次结构设置为自己的UIVIEw(因此是CALayer).

我的想法…

我有一个想法,但如果我要成功,我需要一些方向.如果我在UIVIEw(或CALayer)上创建一个类别,添加一个方法:

[UIVIEw renderSubframe:(CGFrame)frame];

怎么样?嗯,我在想,如果一个虚拟的视图创建了子框架的大小,那么视图可能暂时移到这个.然后,虚拟视图的图层可以调用renderInContext:,从而实现高效,快速的获取视图.

所以…

我真的不是速度与CALayer / Quartz核心的东西…这将有机会工作吗?如果没有,我可以实现什么样的另一种方式 – 最有效的方法是达到同样的效果(或者还有其他人已经面临这个问题并提出了不同的解决方案)?

解决方法 这是我最后写的类别.不如我第一次想到的那样努力,感谢一个方便的CGAffinetransform.

#import "UIVIEw+RenderSubframe.h"#import <QuartzCore/QuartzCore.h>@implementation UIVIEw (RenderSubframe)- (UIImage *) renderWithBounds:(CGRect)frame {    CGSize imageSize = frame.size;    UIGraphicsBeginImageContextWithOptions(imageSize,NO,0.0);    CGContextRef c = UIGraphicsGetCurrentContext();    CGContextConcatCTM(c,CGAffinetransformMakeTranslation(-frame.origin.x,-frame.origin.y));    [self.layer renderInContext:c];    UIImage *screenshot = UIGraphicsGetimageFromCurrentimageContext();    UIGraphicsEndImageContext();    return screenshot;}@end
总结

以上是内存溢出为你收集整理的iphone – 我如何欺骗[CALayer renderInContext:]只渲染图层的一部分?全部内容,希望文章能够帮你解决iphone – 我如何欺骗[CALayer renderInContext:]只渲染图层的一部分?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1083416.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存