日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于iPhone的UIView刷新(转)

發(fā)布時間:2023/12/9 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于iPhone的UIView刷新(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家應該都比較清楚如果想要刷新一個UIView的話,調用它的setNeedsDisplay即可。

問題是,當你調用了一個UIView的setNeedsDisplay之后,該UIView何時才得到刷新?

經過調研發(fā)現,應該是在一個runloop的最后階段刷新。

什么是一個runloop呢?個人認為可以簡單的理解為了一個事件的處理過程。

例如用戶點擊屏幕是兩個runloop。

當用戶按下的時候,...一系列處理->UIView的touchesBegan函數->一系列處理 ?這里是一個runloop

當用戶抬起的時候,...一系列處理->UIView的touchesEnd函數->一系列處理 ?這里是另一個runloop

通常情況下,在UIView的touches事件處理函數中調用setNeedsDisplay能保證在下一次touches事件之前界面被刷新(不過不管你在一個touches事件處理函數中調用多少次setNeedsDisplay,界面只會被刷新一次)。

?

但是也有一些例外。例如UIScrollView。

因為UIScrollView要判定當前的用戶操作是不是拖動,因此它會延遲回調touches處理函數??赡艹霈F在一個runloop中同時回調多次touches處理函數。

如果你在UIScrollView?touchesBegan里面做了一些改變界面的事情,然后在touchesEnd里面復原界面。

很可能的情況就是出現界面沒有做任何改變,你不會看到界面改變再復原的一個過程。

如果你非要顯示界面的變化該怎么辦呢?

一個可行的辦法是在其他線程中等待界面被改變之后再調用setNeedsDisplay.

NSCondition可能比較適合于這種情況。

?

另外關于setNeedDisplayInRect函數如果是一個runloop中調用不同的區(qū)域刷新多次,只會調用drawRect一次,調用的時候會將多個區(qū)域組合起來(drawRect的參數為組合后的區(qū)域)。

組合的原則好像是用一個最小的矩形將你要刷新的多個區(qū)域裝起來。

如果你連續(xù)調用一個左下角和右上角區(qū)域的刷新,那么實際調用drawRect時候的參數很可能就是你整個UIView的frame。

?

轉自:?http://www.cnblogs.com/ydhliphonedev/archive/2011/08/12/2135627.html

轉載于:https://www.cnblogs.com/lzjsky/archive/2013/03/18/2966203.html

總結

以上是生活随笔為你收集整理的关于iPhone的UIView刷新(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。