canvas教程

iOS开发技巧(系列九:UIView截屏)

字号+ 作者:H5之家 来源:H5之家 2017-05-10 10:05 我要评论( )

本博客翻译自苹果问答中心,原文链接在此。 问:在iOS7以及以后的版本中,我怎样对一个UIView对象或者其子类对象截屏,并将截取的内容以UIImage的形式存储? 答

本博客翻译自苹果问答中心,原文。

问:在iOS7以及以后的版本中,我怎样对一个UIView对象或者其子类对象截屏,并将截取的内容以UIImage的形式存储?

答:自iOS7开始,UIView类提供了一个方法-drawViewHierarchyInRect:afterScreenUpdates:,它允许你截取一个UIView或者其子类中的内容,并且以位图的形式(bitmap)保存到UIImage中,包括UIKit,Quartz,OpenGL ES,SpriteKit等等。在iOS6以及更早的版本中,怎样对UIView截屏从本质来说取决于绘制技术(drawing technique)。

看下面的代码示例,在iOS7及以上更高版本中,使用-drawViewHierarchyInRect:afterScreenUpdates,截取一个View中内容,

#pragma mark - Private method

- (UIImage *)snapshot:(UIView *)view

{

    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];

UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    

    return image;

}

上面是翻译的内容,说一说我是怎样在代码中具体使用的吧。

假设self.view上面有一个sourceImageView和一个destinationImageView,我想截取sourceImageView视图的内容,保存在UIImage中,然后赋值给destinationImageView.image,代码如下所示(注:使用arc、xib编码,很多细节不要在意,嘿嘿),

- (IBAction)captureButtonClicked:(id)sender

{

    self.destinationImageView.image = [self snapshot:self.sourceImageView];

}

#pragma mark - Private method

- (UIImage *)snapshot:(UIView *)view

{

    UIGraphicsBeginImageContextWithOptions(view.bounds.size,YES,0);

    [view drawHierarchyInRect:view.bounds afterScreenUpdates:YES];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return image;

}

很简单的代码,也没什么困难的地方。这里,我是将UIImageView对象sourceImageView作为参数传入,是比较简单的情况;有的时候我们需要在应用程序中获取当前self.view中的内容,可以将self.view作为参数传入。

本人建了一个ios交流群188647173,有兴趣的可以加群进来相互交流。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • HTML5 Canvas像素处理使用接口介绍

    HTML5 Canvas像素处理使用接口介绍

    2017-05-09 18:00

  • Unity进阶技巧 - 动态创建UGUI

    Unity进阶技巧 - 动态创建UGUI

    2017-05-07 14:03

  • 《跨平台移动应用开发实战演练》

    《跨平台移动应用开发实战演练》

    2017-05-05 16:02

  • html5canvas核心技术图形、动画与游戏开发源码

    html5canvas核心技术图形、动画与游戏开发源码

    2017-05-02 17:42

网友点评