檢視:重繪與 UIScrollView
當使用者觸控檢視時,檢視會收到 touchesBegan:withEvent:
訊息,該訊息用來處理觸控事件。
產生一個隨機的 UIColor
物件,示例程式碼:
// 獲取三個0到1之間的數字
float red = (arc4random() % 100) / 100.0;
float green = (arc4random() % 100) / 100.0;
float blue = (arc4random() % 100) / 100.0;
UIColor *randomColor = [UIColor colorWithRed:red
green:green
blue:blue
alpha:1.0];
self.circleColor = randomColor;
- 執行迴圈和重繪檢視
iOS 應用啟動時會開始一個執行迴圈 (run loop) 。執行迴圈的工作是監聽事件,例如觸控。當事件發生時,執行迴圈會為相應的事件找到合適的處理方法,這些處理方法會呼叫其他方法,以此類推。只有當這些方法都執行完,控制權才會再次回到執行迴圈。
此時,執行迴圈首先會檢查是否有等待重繪的檢視(即收到過
setNeedsDisplay
訊息的檢視),然後向所有等待重繪的檢視傳送drawRect:
訊息,最後繪製。
以文字框輸入為例,示意圖如下:
iOS SDK 中提供的檢視物件會自動在顯示內容發生改變時向自身傳送 setNeedsDisplay
訊息,例如 UILabel
。而自定義的 UIView
子類,則需手動向其傳送 setNeedsDisplay
訊息,示例程式碼如下:
- (void)setCircleColor:(UIColor *)circleColor {
_circleColor = circleColor;
[self setNeedsDisplay];
}
這樣再點選檢視就可以看到顏色變化了。如圖:
- 類擴充套件
在 BNRHypnosisView.m
檔案的頂部 (@implementation
之前 ) 新增的這三行程式碼,如下:
@interface BNRHypnosisView ()
@property (strong, nonatomic) UIColor *circleColor;
@end
稱為 BNRHypnosisView
的類擴充套件。
作用:宣告只在類的內部使用的屬性和方法。可以保持標頭檔案簡潔,避免內部實現細節的暴露。
- UIScrollView
UIScrollView
是 UIView
的子類,也可以使用 initWithFrame:
訊息初始化,還可以作為子檢視新增到其他檢視。
新增 UIScrollView
後的檢視結構如圖所示:
設定分頁:
[scrollView setPagingEnabled:YES]; //分頁顯示
若不設定分頁,如果有多個物件時,可能出現如下效果(即螢幕同時顯示多個檢視的一部分):
分頁實現原理:
UIScrollView
物件會根據其bounds
的尺寸將contentSize
分割成多個尺寸相同的區域。拖動結束後,UIScrollView
例項會自動滾到並顯示其中一個區域。
程式碼地址:
https://github.com/Ranch2014/iOSProgramming4ed/tree/master/05-RedrawingAndUIScrollView/Hypnosister
相關文章
- iOS10 UI教程檢視的繪製與檢視控制器和檢視iOSUI
- UIScrollView載入子檢視偏移64的問題UIView
- 重繪(repaints)與重排(reflows)AI
- UIScrollView視覺差動畫UIView視覺動畫
- 迴流(reflow)與重繪(repaint)AI
- 瀏覽器的重繪與重排瀏覽器
- 高效能JavaScript 重排與重繪JavaScript
- 淺析物化檢視與查詢重寫(Enable query rewrite)
- 【MV】物化檢視查詢重寫
- Python繪圖與視覺化Python繪圖視覺化
- flutter: 視窗初始與繪製流程Flutter
- 自定義提醒檢視Alert-動態繪製
- 檢視與檢視控制器生命週期
- Django:路由與檢視Django路由
- 安卓學習筆記31:使用自定義檢視繪製文字、圖形與影像安卓筆記
- 4.2.8 檢視元件的Oracle重啟配置元件Oracle
- 資料檢視的重複問題
- 物化檢視prebuilt和線上重定義UI
- 重排和重繪
- 關於迴流與重繪優化的探索優化
- 瀏覽器的迴流與重繪 (Reflow & Repaint)瀏覽器AI
- 重構:仔細檢視 改進程式碼
- UIScrollVIewUIView
- iOS 重繪之drawRectiOS
- 高效能JavaScript 重排與重繪 讀書筆記JavaScript筆記
- CSS新特性contain,控制頁面的重繪與重排CSSAI
- 前端優化,瞭解瀏覽器重排與重繪前端優化瀏覽器
- 前端迴流與重繪:概念及觸發條件前端
- iOS探索:UI檢視之卡頓、掉幀及繪製原理iOSUI
- Android檢視狀態及重繪流程分析,帶你一步步深入瞭解View(三)AndroidView
- MySQL檢視簡介與操作MySql
- docker 容器的使用與檢視Docker
- XPM轉換與檢視工具
- Flutter檢視的Layout與PaintFlutterAI
- 【asp.net core 系列】3 檢視以及檢視與控制器ASP.NET
- iOS10 UI教程檢視的邊界與檢視的框架iOSUI框架
- UIScrollView AutoLayoutUIView
- 理解UIScrollViewUIView