縮放效果的輪播圖 iOS

weixin_33935777發表於2018-02-27
1802365-9dcbee87be0c7823.gif
111.gif

做個一個縮放的輪播圖,基本實現功能。
簡單的記錄下思路:
因為螢幕展示有三張圖,所以傳入的圖片要先新增4張,左邊兩張(倒數第二張,倒數第一張),右邊兩張(第一張,第二張)
1、實現圖片縮放功能(主要程式碼)

-(void)scaleImagevWithCenterX:(CGFloat)centerx{
    for (UIImageView *imagev in self.imgViewArr) {
        //計算當前控制元件與顯示區中心點的相對距離
        CGFloat distance = ABS(imagev.center.x - centerx);
        //設定縮放係數
        CGFloat factor=self.scaleFactor;
        //獲取縮放倍數
        CGFloat scales=1/(1+distance*factor);
        //進行縮放
        imagev.transform=CGAffineTransformMakeScale(scales, scales);
    }
    
}

2、實現分頁效果,主要是藉助了scrollview的delegate,根據圖片的寬度,目標偏移量x,計算出偏移後的頁數,再根據velocity.x滑動的力度,算出,便宜後是否還要平移居中調整

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{

3、實現迴圈,如果到了第二張圖,直接contentOffset到倒數第二張,反之,依然。具體在方法scrollOver中。
4、新增定時器,scrollViewWillBeginDragging停止,scrollViewDidEndDragging:
willDecelerate:開啟
5、寫完發現個問題,定時器迴圈沒問題,但是,手動迴圈,有時連續滑動,直接到達第一張或末張,在scrollViewDidScroll中,寫入下面方法,解決

 if (scrollView.contentOffset.x< self.imgWidth) {
            scrollView.contentOffset = CGPointMake(self.imgWidth, 0);
            
            self.scrollView.contentOffset=CGPointMake(self.imgWidth * (self.imgViewArr.count - 3), 0);
            self.currentIndex = self.imgViewArr.count - 3;
        }else if (scrollView.contentOffset.x > (self.imgArr.count - 2) * self.imgWidth){
            self.scrollView.contentOffset = CGPointMake(self.imgWidth * 2, 0);
            self.currentIndex = 2;
        }

[demo地址(點選跳轉)](https://github.com/yuanweiqianyu/BannerView
個人感覺,自己完成的輪播還是有些問題,如有大神,有改進方案,或者別的思路,敬請交流,指正。

相關文章