一般來說scrollView與UIPageControl都是結合使用,因為在使用滾動視圖的時候 ,使用UIPageControl,用戶可以 清楚 的明白顯示的內容有多少頁,如果 沒有的話,總不能讓用戶一個個的去數。用戶體驗效果不理想。 一般來說,在滑動scrollView的時候,UIPageCont
一般來說scrollView與UIPageControl都是結合使用,因為在使用滾動視圖的時候 ,使用UIPageControl,用戶可以 清楚 的明白顯示的內容有多少頁,如果 沒有的話,總不能讓用戶一個個的去數。用戶體驗效果不理想。
一般來說,在滑動scrollView的時候,UIPageControl的選中點的位置也會有相應的變化。當然,反之來說,改變選中點的位置,相應的scrollView顯示的內容也會產生變化 。
因為我這邊需要實現的效果是:最後一張向後滑動之後,會自動跳到第一張顯示的內容。如果想解決這個,只需要在第一張之前添加一個最後一張的圖片。具體代碼就不展示了。關於改變scrollView,來改變UIPageControl當前的值。
具體的代碼實現。
//在滾動視圖停止滾動時,改變pageControl上面點的位置 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ //獲取滾動視圖當前的偏移量 CGPoint offset = scrollView.contentOffset; //計算偏移量與屏幕寬度的關係,也就是偏移了多少倍 NSInteger page = offset.x / kWidth; self.pageControl.currentPage = page - 1 < 0 ? 9 : page - 1; }
那如果改變UIPageControl當前的值,來達到改變scrollView的內容呢。通過對所添加的UIPageControll來設置觸發方法為click
具體代碼展示。
//通過點圓點的位置來改變視圖的變化 - (void)click:(UIPageControl *)pageControl{ self.scrollView.contentOffset = CGPointMake(kWidth * (pageControl.currentPage + 1), 0); }
而對於scrollView來說,如果只設置了一個scrollView的話,我們所達到的效果是不理想的,因為在縮放的同時,也會改變本身的contentSize,所以所達到的效果是不會理想的,也會有很嚴重的惡劣感。當然,想解決這個,也非常的容易 ,只需要在scrollView上添加一個子視圖,一個等大的scrollView,就稱呼為小scrollView,小scrollView用來進行縮放處理,而大scrollView來進行滾動。這樣一來 ,就不會改變大scrollView整體的contentSize.
小scrollView縮放的具體代碼展示。
//必須設置縮放比例以及設置代理對象 smallScroll.delegate = self; smallScroll.minimumZoomScale = 0.5; smallScroll.maximumZoomScale = 2.0;
//指定縮放的視圖 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ //return [scrollView.subviews firstObject]; return [scrollView.subviews objectAtIndex:0]; } //中心點縮放 - (void)scrollViewDidZoom:(UIScrollView *)scrollView{ UIImageView *imageV = [scrollView.subviews firstObject]; if (scrollView.zoomScale <= 1.0) { imageV.center = CGPointMake(kWidth / 2, kHeight / 2); } }
因為是對小scrollView進行縮放,所以 在進行縮放前,必須要指定進行縮放的視圖是哪一個。 所以 大srcollView的第一個子視圖就是我想要進行縮放的視圖。
當然,到了這個地步 ,又發現了一個新的問題,滑動到下一頁後,再返回剛剛縮放過的地方,發現還是改變後的圖片,並沒有恢覆成原樣。發現問題就應該合理的解決好問題。
//減速結束,也就是停止滾動 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ NSLog(@"結束滾動"); // 先從負責滾動的⼤scrollView找到他的⼦子視圖 for (UIScrollView *sView in scrollView.subviews){ // 在根據⼦子類的對象類型進⾏行判斷 if ([sView isKindOfClass:[UIScrollView class]]){ // 把視圖的尺⼨寸恢復到原有尺⼨寸 sView.zoomScale = 1.0; } } }
當然,使用這些方法的前提就是設置好代理.Delegate。
做到這個地方,基礎的都做完了。不管怎麼說。合理的利用方法。發現問題並解決好問題,才是一個新手應該註意的地方。一個方法的使用,並不是單純的只有一個使用方法,多種思路就可能會有不同的解決方式 。scrollView是滾動視圖,使用還是比較簡單,日常使用還是挺頻繁的,而基於scrollView的UITableView才是日後使用的重點。api文檔是可以很好的幫助解決了個個方法的介紹。雖然全英文,可能會看不懂。當不看,你永遠不懂,所以要慢慢的,嘗試瞭解一點。會一點是一點。