国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

[iOS基礎控件-5.1]UIScrollView

2019-11-14 19:49:15
字體:
來源:轉載
供稿:網友
A.需要掌握
UIScrollView 是一個能夠滾動的視圖控件,可以用來展示大量內容,如手機的“設置”
1.常見屬性
2.常用代理方法
3.縮放
4.UIScrollView和UipageControl的分頁
5.NSTime的使用
 
B.UIScrollView概念與使用
練習:顯示大圖,以原始尺寸顯示一張圖片,可以滾動查看圖片的各個部分
 
原圖: 900 x 1305
Image(39)
 
1.拖入UIScrollView,加入一個ImageView,設置圖片,設置圖片尺寸
Image(40)Image(41)
 
在controller中獲取到scrollView和圖片控件
Image(42)
 
2.使用代碼設置UIScrollView的 contentSize 屬性,這是用來設置滾動范圍的
1     // 設置滾動范圍,這里用圖片實際大小2     self.scrollView.contentSize = self.imageView.frame.size;
 
3.如果UIScrollView不能滾動,可能原因如下:
(1)沒有設置contentSize
(2)scrollEnable = NO
(3)沒有接收到觸摸事件:userInteractionEnable = NO
(4)沒有取消autolayout
 
拖動:
Image(43)
 
 
6.UIScrollView常見屬性
1     // 表示滾動位置,相對于初始位置2     @PRoperty(nonatomic)         CGPoint                      contentOffset;3    4     // 表示尺寸、滾動范圍5     @property(nonatomic)         CGSize                       contentSize;6    7     // 這個屬性能夠增加四周額外的滾動范圍8     @property(nonatomic)         UIEdgeInsets                 contentInset;
 
(1)各類位置、尺寸:
Image(44)
 
(2)額外邊距 Insets
1     // 增加邊距顯示,參數分別是top, left, bottom, right2     self.scrollView.contentInset = UIEdgeInsetsMake(10, 20, 40, 80);
 
Image(45)     Image(46)
 
 
(3)移動圖片
1     // 移動到(200, 300)位置2     self.scrollView.contentOffset = CGPointMake(200, 300);
 
Image(47)
 
 
7.其他屬性
 1     // 是否需要彈簧效果 2     @property(nonatomic)         BOOL                        bounces; 3     4     // 是否能夠滾動 5     @property(nonatomic,getter=isScrollEnabled) BOOL          scrollEnabled; 6     7     // 顯示水平滾動條 8     @property(nonatomic)         BOOL                        showsHorizontalScrollIndicator; 9    10     // 顯示垂直滾動條11     @property(nonatomic)         BOOL                        showsVerticalScrollIndicator;
 
8.代理delegate
(1)用處:
監聽思想:讓一個對象A監聽另一個對象B的狀態
通知思想:一個對象B狀態發生了改變,要通知對象A
這里A是B的代理,誰想監聽,誰就是代理
 
(2)使用UIScrollView內部的delegate對象,監聽事件,實現圖片大小的不斷轉換
1 @property(nonatomic,assign) id<UIScrollViewDelegate>      delegate; // default nil. weak reference
 
(3)UIScrollView的代理(delegate)的任務:
  • 設置UIScrollView在滾動過程某個特定位置、事件做一些特定的操作
  • 必須監聽整個滾動過程
  • 發生滾動時,發送消息(調用方法)代理(delegate)對象
  • 所以需要給UIScrollView設置一個delegate成員
 
所以要稱為UIScrollView的delegate必須實現以上方法,這些方法聲明在了UIScrollViewDelegate協議中,即要成為UIScrollView的delegate,必須遵守UIScrollViewDelegate協議。
 
(4)設置delegate三步驟:
a.直接使用當前控制器作為delegate
1 #import <UIKit/UIKit.h>2 @interface ViewController : UIViewController <UIScrollViewDelegate>3 @end
 
b.指定UIScrollView的delegate
1 self.scrollView.delegate = self;
 
c.delegate實現方法
 
i.例如針對拖曳滾動的3個方法:
 1 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { 2      NSLog(@"開始拖曳"); 3 } 4  5 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { 6     NSLog(@"正在拖曳"); 7 } 8  9 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {10     NSLog(@"結束拖曳");11 }
 
ii.針對手勢縮放的3個方法
 1 - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view { 2     NSLog(@"開始縮放"); 3 } 4  5 - (void)scrollViewDidZoom:(UIScrollView *)scrollView { 6     NSLog(@"正在縮放"); 7 } 8  9 - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {10     NSLog(@"結束縮放");11 }
 
iii.拖曳后的減速(2個方法)
1 - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {2     NSLog(@"拖曳完成后減速開始");3 }4 5 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {6     NSLog(@"拖曳完成后減速完成");7 }
 
9.手勢縮放
UIScrollView不僅能夠滾動顯示大量內容,還能對其內容進行縮放,所以只需要把要縮放的圖片放到UIScrollView中。
一次只能縮放一個子控件,UIScrollView通過使用delegate調用手勢方法,返回的就是指定要縮放的控件
1     // 捏合手勢調用的方法2     - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;
 
這個方法返回的就是需要進行縮放的控件
  • 設置minimumZoomScale:縮小的最小比例
  • 設置maximumZoomScale:放大的最大比例
 
實現步驟:
(1)實現手勢調用方法
1 // 圖片2 @property (weak, nonatomic) IBOutlet UIImageView *imageView;3  4 // 縮放手勢調用的方法5 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {6     return self.imageView; // 需要放大的ImageView7 }

 

(2)設置縮放比例
1     self.scrollView.maximumZoomScale = 2.0;2     self.scrollView.minimumZoomScale = 0.1;
 
(3)效果
a.縮小
Image(48)
b.放大
Image(49)
 
 
10.分頁
例子就是桌面的APP列表,當APP數量超過一個屏幕,自動進行分頁
 
設置屬性pageEnable = YES,UIScrollView會被分割成多個獨立頁面,進行分頁顯示
一般使用UIPageControl增強效果,UIPageControl常見屬性:
 1     // 總頁數 2     @property(nonatomic) NSInteger numberOfPages;          // default is 0 3     // 當前頁碼 4     @property(nonatomic) NSInteger currentPage; 5     // 只有一頁的時候隱藏頁碼 6     @property(nonatomic) BOOL hidesForSinglePage;          // hide the the indicator if there is only one page. default is NO 7     // 其他頁碼指示顏色 8     @property(nonatomic,retain) UIColor *pageIndicatorTintColor; 9     // 當前頁碼指示顏色10     @property(nonatomic,retain) UIColor *currentPageIndicatorTintColor;
 
11.NSTimer
定時器,功能:
  • 在指定的時間執行指定的任務
  • 每隔一段時間執行指定的任務
 
(1)調用以下方法開啟定時任務,然后調用 fire 方法執行:
1 + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;2  3 - (void)fire;
 
每間隔ti秒執行一次aSelector方法,yesOrNo是否重復執行
 
(2)調用一下方法創建NSTimer,不用調用 fire 就會運行
1 + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;
 
(3)通過invalidate方法可以停止定時器的工作,但是不能再次執行,只能再重新創建一個新的定時器
1     // 永久終止工作2     - (void)invalidate;
 
另外有兩個類可以做定時任務:
  • NSTimer:適合時間間隔比較大
  • CADisplayLink:適合頻率比較高,做游戲動畫用
 
 
(4)定時器在單線程下存在的問題
     UI界面只能使用主線程刷新,如果使用阻斷手段(例如定時器觸發畫面滑動,但是可以手動干擾畫面移動),干擾定時器的運行,就會阻止定時器的事件觸發,被阻止的事件累積之后會在線程資源得到解放之后觸發。
    
解決:當出現阻斷手段阻止了定時器觸發的時候,回收定時器,等得到線程資源之后再重新創建定時器。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 突泉县| 天长市| 手游| 永平县| 睢宁县| 章丘市| 高要市| 靖江市| 通辽市| 芒康县| 天柱县| 郑州市| 东辽县| 金门县| 东阿县| 扎赉特旗| 仙游县| 大宁县| 黑山县| 汝南县| 临沭县| 垫江县| 辽宁省| 南充市| 雅安市| 修水县| 富平县| 客服| 兴隆县| 遂溪县| 弥勒县| 千阳县| 临高县| 临夏县| 中方县| 和龙市| 河池市| 突泉县| 五寨县| 呼玛县| 晋江市|