[iOS基礎控制項 - 5.1] UIScrollView

來源:互聯網
上載者:User

標籤:des   style   blog   http   io   ar   color   os   使用   

A.需要掌握UIScrollView 是一個能夠滾動的視圖控制項,可以用來展示大量內容,如手機的“設定”1.常見屬性2.常用代理方法3.縮放4.UIScrollView和UIPageControl的分頁5.NSTime的使用 B.UIScrollView概念與使用練習:顯示大圖,以原始大小顯示一張圖片,可以滾動查看圖片的各個部分 原圖: 900 x 1305 1.拖入UIScrollView,加入一個ImageView,設定圖片,設定圖片尺寸 在controller中擷取到scrollView和圖片控制項 2.使用代碼設定UIScrollView的 contentSize 屬性,這是用來設定滾動範圍的
1     // 設定滾動範圍,這裡用圖片實際大小2     self.scrollView.contentSize = self.imageView.frame.size;
 3.如果UIScrollView不能滾動,可能原因如下:(1)沒有設定contentSize(2)scrollEnable = NO(3)沒有接收到觸摸事件:userInteractionEnable = NO(4)沒有取消autolayout 拖動:  6.UIScrollView常見屬性
1     // 表示滾動位置,相對於初始位置2     @property(nonatomic)         CGPoint                      contentOffset;3    4     // 表示尺寸、滾動範圍5     @property(nonatomic)         CGSize                       contentSize;6    7     // 這個屬效能夠增加四周額外的滾動範圍8     @property(nonatomic)         UIEdgeInsets                 contentInset;
 (1)各類位置、尺寸: (2)額外邊距 Insets
1     // 增加邊距顯示,參數分別是top, left, bottom, right2     self.scrollView.contentInset = UIEdgeInsetsMake(10, 20, 40, 80);
        (3)移動圖片
1     // 移動到(200, 300)位置2     self.scrollView.contentOffset = CGPointMake(200, 300);
   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.縮小b.放大  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介面只能使用主線程重新整理,如果使用阻斷手段(例如定時器觸發畫面滑動,但是可以手動幹擾畫面移動),幹擾定時器的運行,就會阻止定時器的事件觸發,被阻止的事件累積之後會線上程資源得到解放之後觸發。    解決:當出現阻斷手段阻止了定時器觸發的時候,回收定時器,等得到線程資源之後再重新建立定時器。

[iOS基礎控制項 - 5.1] UIScrollView

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.