iPhone上的有没有立即绘制的接口?

讨论iOS平台中实现立即更新UI界面的方法及设计原则,强调将耗时操作放入线程处理以减轻UI主线程负担,确保界面流畅响应。

    玩过一些平台如win32.bada上面都有立即绘制的接口。例如win32下 invalidatRect之后,updatewindow就可以立即绘制无效区域到窗口。

那iphone有没有类似的接口呢?

除了setNeedDisplayInRect这个发出重绘的异步接口,有没有一个立即刷屏的接口呢,就是说一个同步绘制的方法?实际工作中很容易产生这样的想法,即时刷新。

答案是没有好的方式。我们只能把当前runloop的消息(来自input resourse 或者timer resourse)处理完成。等到下一个循环进入drawrect方法完成实际绘制。

所以若在一个调用堆栈里面有复杂的计算或耗时的操作,中间又夹杂着一些绘制需求,时而发出setNeedDisplayInRect,其实这些都绘制是不能

立即完成的,只能等到下个runloop去drawRect了。很明显不符合实际的调用需求----立即绘制 更新UI界面。。。

所以最好把这些耗时的操作放到线程中去处理,减少ui主线程的繁杂度,让UI的轻度运行。工作线程可以向UI线程(主线程)发出实际的绘制请求,

这样UI线程就能够即时刷新呈现画面。问题的根本还是设计问题。

 

stackoverflow上的这篇贴子也说道几种怪异的方法,都是在当前任务的处理内取出下一个消息执行,是一种runloop的执行嵌套。估计win32的updatewindow也是这样的原理,

这些方法也许可以救急,但是软件的框架设计上最好遵循上述原则。

 

转载于:https://www.cnblogs.com/ianwang/archive/2011/11/22/2259297.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值