HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iphone – 我如何欺骗[CALayer renderInContext:]只渲染图层的一部分?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_674_2@
我很清楚,除了渲染整个视图和裁剪之外,还没有一种很好的方法将uIView的一小部分呈现给图像. (在像iPad 3这样的图像非常昂贵的地方,图像巨大).有关renderInContext方法的描述,请参见 here(没有其他选择).

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

我的想法…

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

[UIView renderSubframe:(CGFramE)frame];

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

所以…

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

@H_674_2@

解决方法

这是我最后写的类别.不如我第一次想到的那样努力,感谢一个便的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
@H_674_2@ @H_674_2@
@H_674_2@
@H_674_2@

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。