[翻译] snapshotViewAfterScreenUpdates

简介:

snapshotViewAfterScreenUpdates

This method very efficiently captures the current rendered appearance of a view and uses it to build a new snapshot view. You can use the returned view as a visual stand-in for the current view in your app. For example, you might use a snapshot view for animations where updating a large view hierarchy might be expensive. Because the content is captured from the already rendered content, this method reflects the current visual appearance of the view and is not updated to reflect animations that are scheduled or in progress. However, calling this method is faster than trying to render the contents of the current view into a bitmap image yourself.

这个方法能够高效的将当前显示的view截取成一个新的view.你可以用这个截取的view用来显示.例如,也许你只想用一张截图来做动画,毕竟用原始的view做动画代价太高.因为是截取了已经存在的内容,这个方法只能反应出这个被截取的view当前的状态信息,而不能反应这个被截取的view以后要显示的信息.然而,不管怎么样,调用这个方法都会比将view做成截图来加载效率更高.


Because the returned snapshot is a view object, you can modify it and its layer object as needed. However, you cannot change the contents property of the snapshot view’s layer; attempts to do so fail silently. If the current view is not yet rendered, perhaps because it is not yet onscreen, the snapshot view has no visible content.

因为返回的是一个view对象,所以,你可以更改它以及它的layer属性.但是呢,你不能够修改它的layer的content属性;如果你试图这么做,将不会有任何效果.如果当前的view还没有渲染,或者这么说吧,因为还没有出现在屏幕上,那么,这个截取的view将不会有能显示的content.


You can call this method on a previously generated snapshot to obtain a new snapshot. For example, you could do so after you change properties of a previous snapshot (such as its alpha value) and want a new snapshot that includes those changes.

你也可以用这个方法在截取的view的基础上截取出一张新的view出来.


If you want to apply a graphical effect, such as blur, to a snapshot, use the drawViewHierarchyInRect:afterScreenUpdates: method instead.

如果你想要加载一个图形效果,比如blur,请使用这个方法drawViewHierarchyInRect:afterScreenUpdates:来代替.

 

以下是运行效果(左上角是被截取的view,中间是截取的view):

源码:

//
//  RootViewController.m
//  SnapshotView
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "RootViewController.h"
#import "YXGCD.h"

@interface RootViewController ()

@end

@implementation RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // 原始的view
    UIView *showView         = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    showView.backgroundColor = [UIColor redColor];
    [self.view addSubview:showView];
    
    // 截取的view
    UIView *snap1 = [showView snapshotViewAfterScreenUpdates:YES];
    snap1.center  = self.view.center;
    [self.view addSubview:snap1];
    
    // 7s钟之后给原始的view进行颜色的变换
    [[GCDQueue mainQueue] execute:^{
        [UIView animateWithDuration:5 animations:^{
            showView.backgroundColor = [UIColor yellowColor];
        }];
    } afterDelay:NSEC_PER_SEC * 7];
}

@end

这个方法是iOS7中新出的,以后再也不用把view渲染成截图来加载了:).

目录
相关文章
|
人工智能 弹性计算 算法
一文解读:阿里云AI基础设施的演进与挑战
一文解读:阿里云AI基础设施的演进与挑战
|
11月前
|
JSON 数据处理 Swift
Swift 中的网络编程,主要介绍了 URLSession 和 Alamofire 两大框架的特点、用法及实际应用
本文深入探讨了 Swift 中的网络编程,主要介绍了 URLSession 和 Alamofire 两大框架的特点、用法及实际应用。URLSession 由苹果提供,支持底层网络控制;Alamofire 则是在 URLSession 基础上增加了更简洁的接口和功能扩展。文章通过具体案例对比了两者的使用方法,帮助开发者根据需求选择合适的网络编程工具。
230 3
|
12月前
|
Swift
Swift 中 struct(结构体)和 class(类)的区别
【10月更文挑战第10天】理解 struct 和 class 的区别对于正确使用 Swift 语言进行编程非常重要。在实际开发中,需要根据具体的需求和场景来选择合适的数据类型,以充分发挥它们的优势,提高代码的质量和效率。
|
机器学习/深度学习 数据采集 算法
Python实现SSA智能麻雀搜索算法优化支持向量机分类模型(SVC算法)项目实战
Python实现SSA智能麻雀搜索算法优化支持向量机分类模型(SVC算法)项目实战
|
存储 人工智能 搜索推荐
【LangChain系列】第六篇:内存管理简介及实践
【5月更文挑战第20天】【LangChain系列】第六篇:内存管理简介及实践
442 0
【LangChain系列】第六篇:内存管理简介及实践
|
网络协议 Ubuntu Linux
「远程开发」VSCode使用SSH远程linux服务器 - 公网远程连接
「远程开发」VSCode使用SSH远程linux服务器 - 公网远程连接
827 0
|
安全 Swift 开发者
【Swift开发专栏】Swift中的异步编程与性能提升
【4月更文挑战第30天】本文探讨了Swift中的异步编程,旨在提升应用性能。首先,介绍了异步编程的基本概念,强调其在处理并发任务和提高响应性中的重要性。接着,阐述了Swift中的异步模型,包括回调函数、Promises以及新引入的`async/await`和`Task`结构体。最后,讨论了通过避免主线程阻塞、合理使用线程和并发优化等策略来提升性能。Swift的异步模型为开发者提供了更简洁、安全的异步编程方式,有助于构建高效应用程序。
214 1
|
SQL 分布式计算 大数据
面经:Impala实时查询引擎原理与性能调优
【4月更文挑战第11天】Apache Impala是高性能的大数据查询引擎,常在面试中被关注。本文分享了Impala的面试重点:架构(Catalog Service、Statestore、Impalad)、查询流程、SQL特性、性能调优及与其他引擎的对比。理解其工作原理、SQL使用和调优策略,对于面试和实际工作都至关重要。通过示例和知识点详解,助你提升对Impala的掌握,自信应对技术考察。
693 3
|
JSON 数据处理 Swift
【Swift 开发专栏】Swift 中的网络编程:URLSession 与 Alamofire
【4月更文挑战第30天】本文探讨了Swift中的网络编程,重点关注URLSession和Alamofire。URLSession是苹果提供的网络请求框架,允许底层控制和定制,适合需要高度灵活性的场景。Alamofire则是在URLSession基础上的第三方库,提供简洁接口和功能扩展,简化网络请求和错误处理。文中还介绍了两者在实际应用中的选择和使用场景,强调掌握网络编程基础的重要性。
277 0
|
Linux 编译器 开发者
Linux嵌入式系统之交叉编译
Linux嵌入式系统之交叉编译
320 0