IOS之UI异步刷新
NSOperationQueue *operationQueue; // for rendering pages on second thread
[operationQueue waitUntilAllOperationsAreFinished];
一句很简单的代码,可以实现UI的异步操作,知道操作完成,才进行进一步刷新。
NSOperationQueue是一个Operation执行队列,你可以将任何你想要执行的Operation添加到Operation Queue中,以在队列中执行。同时Operation和Operation Queue提供了很多可配置选项。Operation Queue的实现中,创建了一个或多个可管理的线程,为队列中的Operation提供可高度自定的执行环境。
DemoCode如下:
// Don't change font feature settings until all secondary thread operations are done
[operationQueue waitUntilAllOperationsAreFinished];
// Set up our font feature bitfield for given optionName
ASDFeaturesBits optionBitSelected = 0;
if (([optionName rangeOfString:ASD_SMALL_CAPITALS]).length > 0 ) {
optionBitSelected = ASDFeaturesSmallCaps;
}
else if (([optionName rangeOfString:ASD_RARE_LIGATURES]).length > 0 ) {
optionBitSelected = ASDFeaturesLigatures;
}
else if (([optionName rangeOfString:ASD_PROP_NUMBERS]).length > 0 ) {
optionBitSelected = ASDFeaturesPropNumbers;
}
else if (([optionName rangeOfString:ASD_STYLISTIC_VARS]).length > 0 ) {
optionBitSelected = ASDFeaturesStylisticVariants;
}
if (optionBitSelected && ((optionBitSelected & ASDFeaturesFeatureMask) != 0)) {
// Font features are most of the time exclusive so for simplicity we allow one feature at a time
viewOptions &= ~ASDFeaturesFeatureMask;
viewOptions |= optionBitSelected;
}
else {
// Passing @"" as the option is used to turn off all options
if ([optionName length] == 0) {
viewOptions = 0;
} else {
viewOptions ^= optionBitSelected;
}
}
if (pageViews[currCoreTextView].selectedFrame == NSUIntegerMax) {
// No selected frame, apply font features to all doc text
NSRange range = NSMakeRange(0, [document.attributedString length]);
[document setFontFeatures:(viewOptions & CoreTextViewOptionsFeatureMask) range:range];
[self relayoutDocFromPage:pageDisplayed];
}
else {
// Apply font features to selected frame
// (note that this only applies for "text" type frames)
CoreTextViewPageInfo* page = [pagesInfo objectForKey:[NSNumber numberWithInt:pageDisplayed]];
CoreTextViewFrameInfo* frame = [page.framesToDraw objectAtIndex:pageViews[currCoreTextView].selectedFrame];
if (frame.frameType == ASDFrameTypeTextFlow) {
[document setFontFeatures:(viewOptions & CoreTextViewOptionsFeatureMask) range:frame.stringRange];
[self relayoutDocFromPage:pageDisplayed];
}
else if (frame.frameType == ASDFrameTypeText) {
ApplyFontFeaturesToString(frame.value, frame.stringRange, (viewOptions & CoreTextViewOptionsFeatureMask));
[frame refreshTextFrame];
[self refreshPage];
}
}
IOS之UI异步刷新的更多相关文章
- iOS之UI组件整理
作者:神兽gcc 授权本站转载. 最近把iOS里的UI组件重新整理了一遍,简单来看一下常用的组件以及它们的实现.其实现在这些组件都可以通过Storyboard很快的生成,只是要向这些组件能够变得生动起 ...
- iOS开发UI篇—CAlayer(自定义layer)
iOS开发UI篇—CAlayer(自定义layer) 一.第一种方式 1.简单说明 以前想要在view中画东西,需要自定义view,创建一个类与之关联,让这个类继承自UIView,然后重写它的Draw ...
- iOS开发UI篇—UITabBarController简单介绍
iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...
- iOS开发-UI 从入门到精通(三)
iOS开发-UI 从入门到精通(三)是对 iOS开发-UI 从入门到精通(一)知识点的综合练习,搭建一个简单地登陆界面,增强实战经验,为以后做开发打下坚实的基础! ※在这里我们还要强调一下,开发环境和 ...
- iOS开发-UI 从入门到精通(二)
iOS开发-UI 从入门到精通(二)是对 iOS开发-UI 从入门到精通(一)知识点的巩固,主要以习题练习为主,增强实战经验,为以后做开发打下坚实的基础! ※开发环境和注意事项: 1.前期iOS-UI ...
- iOS开发UI篇—懒加载
iOS开发UI篇—懒加载 1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了, ...
- iOS开发UI篇—CAlayer层的属性
iOS开发UI篇—CAlayer层的属性 一.position和anchorPoint 1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint @property ...
- iOS开发UI篇—CAlayer(创建图层)
iOS开发UI篇—CAlayer(创建图层) 一.添加一个图层 添加图层的步骤: 1.创建layer 2.设置layer的属性(设置了颜色,bounds才能显示出来) 3.将layer添加到界面上(控 ...
- iOS开发UI篇—CALayer简介
iOS开发UI篇—CALayer简介 一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实 ...
随机推荐
- UTC与本地时间字符串互相转换
#!/usr/bin/env python import time import datetime # 格式自改 UTC_FORMAT = '%Y-%m-%dT%H:%M:%SZ' LOCAL_FOR ...
- SSH框架搭建的时候遇到的问题
1.spring-web.jar包问题:使用user libaries方式,识别不到,于是出现了下面问题 java.lang.ClassNotFoundException: org.springfra ...
- 发送邮件小工具(python)
#!/usr/bin/python # -*- coding:UTF- -*- import sys import smtplib import email.mime.multipart import ...
- C# 获取汉字的拼音首字母和全拼(含源码)
C# 获取汉字的拼音首字母 一种是把所有中文字符集合起来组成一个对照表:另一种是依照汉字在Unicode编码表中的排序来确定拼音的首字母.碰到多音字时就以常用的为准(第一种方法中可以自行更改,方法为手 ...
- HTML5 中的meter 标签的样式设置
meter { -webkit-appearance: none; position: relative; display: block; margin: 8px auto; width: 100px ...
- 怎么在const成员函数里面调用非const成员函数?
举个例子: 定义了一个类的const实例,怎么让他也能调用非能调用非const成员函数class foo{public:void test1() {cout << "I am n ...
- python-selenium-robotframework安装问题
背景 当前系统安装了两个不同版本的python,分别是python27和python36(如图1),如图 说明 系统安装的两个python版本,python2中的python.exe默认不做修改:py ...
- 11-1模拟赛 By cellur925
期望得分:70+100+60 实际得分:70+20+60 \(qwq\). T1:有一个 \(n\) × \(n\) 的 \(01\) 方格, 图图要从中选出一个面积最大的矩形区域, 要求这个矩形区域 ...
- 分布式通信-tcp/ip 广播
服务端 /** * 广播 */ public class MulticastServer { public static void main(String[] args) { try { //地址是2 ...
- [题解](tarjan割点/点双)luogu_P3225_矿场搭建
首先和割点有关,求割点,然后这些割点应该把这个图分成了多个点双,可以考虑点双的缩点,假如缩点做的话我们要分析每个点双的性质和贡献 先拿出一个点双来,如果它没有连接着割点,那么至少要建两个,以防止其中一 ...