欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS實現(xiàn)帶有縮放效果的自動輪播圖

 更新時間:2018年05月07日 15:53:27   作者:NB_Token  
這篇文章主要為大家詳細介紹了iOS帶有縮放效果的自動輪播圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了iOS帶有縮放效果的自動輪播圖,供大家參考,具體內容如下

可直接設置frame然后加載到視圖上使用。

效果就是這樣的,圖片切換的過程中還是有卡頓,不夠流暢,后續(xù)更新。

直接上代碼。

.h文件包含:

#import <UIKit/UIKit.h> 
 
@interface CustomScrollView : UIView 
@property (strong,nonatomic) NSArray *imageArr; 
 
@end 

.m文件包含:

#import "CustomScrollView.h" 
 
@interface CustomScrollView ()<UIScrollViewDelegate> 
 
@property (strong,nonatomic) UIScrollView *scrollView; 
@property (strong,nonatomic) UIImageView *backImageView; 
 
@property (strong,nonatomic) UIImageView *leftIamgeView; 
@property (strong,nonatomic) UIImageView *middleImageView; 
@property (strong,nonatomic) UIImageView *rightImageView; 
 
@property (strong,nonatomic) UIPageControl *pageControl; 
 
//高度 
@property (assign,nonatomic) CGFloat scrollViewHeight; 
 
//手動造成的偏移量 
@property (assign,nonatomic) CGFloat offsetX; 
 
@property (strong,nonatomic) NSTimer *timer; 
 
//屬于計時器方法動畫持續(xù)時間 ? 
@property (assign,nonatomic) BOOL timerAnimation; 
 
@end 
 
//左右內容的最大偏移量 
#define OFFSET_MAX ([UIScreen mainScreen].bounds.size.width-64)*0.9 
 
 
@implementation CustomScrollView 
 
- (instancetype)initWithFrame:(CGRect)frame { 
 if (self = [super initWithFrame:frame]) { 
 
 self.scrollViewHeight = frame.size.height; 
 
 [self addSubview:self.backImageView]; 
 [self addSubview:self.scrollView]; 
 [self addSubview:self.pageControl]; 
 
 [self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) { 
 make.edges.with.mas_equalTo(self); 
 }]; 
 [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) { 
 make.edges.with.mas_equalTo(self); 
 }]; 
 [self.pageControl mas_makeConstraints:^(MASConstraintMaker *make) { 
 make.left.right.bottom.mas_equalTo(self); 
 make.height.mas_equalTo(@20); 
 }]; 
 
 self.timer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(timerAction) userInfo:nil repeats:YES]; 
 [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode]; 
 [self.timer setFireDate:[NSDate dateWithTimeIntervalSinceNow:5]]; 
 } 
 return self; 
} 
 
- (NSArray *)imageArr { 
 if (!_imageArr) { 
 _imageArr = @[@"timg-0",@"timg-1",@"timg-2"]; 
 } 
 return _imageArr; 
} 
 
- (UIImageView *)backImageView { 
 if (!_backImageView) { 
 _backImageView = [[UIImageView alloc] init]; 
 _backImageView.image = [UIImage imageNamed:@"bg_home"]; 
 } 
 return _backImageView; 
} 
 
- (UIScrollView *)scrollView { 
 if (!_scrollView) { 
 _scrollView = [[UIScrollView alloc] init]; 
 _scrollView.showsVerticalScrollIndicator = NO; 
 _scrollView.showsHorizontalScrollIndicator = NO; 
 _scrollView.contentSize = CGSizeMake(kScreenWidth+2*OFFSET_MAX, self.scrollViewHeight); 
 [_scrollView setContentOffset:CGPointMake(OFFSET_MAX, 0)]; 
 _scrollView.bounces = NO; 
 _scrollView.delegate = self; 
 
 _leftIamgeView = [[UIImageView alloc] init]; 
 _leftIamgeView.image = [UIImage imageNamed:self.imageArr[0]]; 
 _leftIamgeView.layer.cornerRadius = 5; 
 _leftIamgeView.layer.masksToBounds = YES; 
 
 
 _middleImageView = [[UIImageView alloc] init]; 
 _middleImageView.image = [UIImage imageNamed:self.imageArr[1]]; 
 _middleImageView.layer.cornerRadius = 5; 
 _middleImageView.layer.masksToBounds = YES; 
 
 
 _rightImageView = [[UIImageView alloc] init]; 
 _rightImageView.image = [UIImage imageNamed:self.imageArr[2]]; 
 _rightImageView.layer.cornerRadius = 5; 
 _rightImageView.layer.masksToBounds = YES; 
 
 
 [_scrollView addSubview:_leftIamgeView]; 
 [_scrollView addSubview:_middleImageView]; 
 [_scrollView addSubview:_rightImageView]; 
 [_leftIamgeView mas_makeConstraints:^(MASConstraintMaker *make) { 
 make.size.mas_equalTo(CGSizeMake((kScreenWidth-64)*0.9, self.scrollViewHeight*0.9)); 
 make.centerY.mas_equalTo(_scrollView); 
 make.right.mas_equalTo(_middleImageView.mas_left).offset(-20); 
 }]; 
 [_middleImageView mas_makeConstraints:^(MASConstraintMaker *make) { 
 make.size.mas_equalTo(CGSizeMake(kScreenWidth-64, self.scrollViewHeight)); 
 make.centerY.mas_equalTo(_scrollView); 
 make.left.mas_equalTo(_scrollView).offset(OFFSET_MAX+64/2); 
 }]; 
 [_rightImageView mas_makeConstraints:^(MASConstraintMaker *make) { 
 make.size.mas_equalTo(_leftIamgeView); 
 make.centerY.mas_equalTo(_scrollView); 
 make.left.mas_equalTo(_middleImageView.mas_right).offset(20); 
 }]; 
 } 
 return _scrollView; 
} 
 
- (UIPageControl *)pageControl { 
 if (!_pageControl) { 
 _pageControl = [[UIPageControl alloc] init]; 
 _pageControl.numberOfPages = self.imageArr.count; 
 _pageControl.enabled = NO; 
 _pageControl.currentPage = 0; 
 _pageControl.hidesForSinglePage = YES; 
 _pageControl.pageIndicatorTintColor = [UIColor whiteColor]; 
 _pageControl.currentPageIndicatorTintColor = MAINCOLOR; 
 } 
 return _pageControl; 
} 
 
 
#pragma mark ------------ UIScrollViewDelegate -------- 
 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
 if (self.timerAnimation) { 
 return; 
 } 
 CGFloat offScale = scrollView.contentOffset.x - OFFSET_MAX; 
 if (offScale < 0) { 
 //右滑 
 self.leftIamgeView.layer.transformScale = 1 + 1.0/9*(fabs(offScale)/OFFSET_MAX); 
 self.middleImageView.layer.transformScale = 1 - 0.1*(fabs(offScale)/OFFSET_MAX); 
 } else { 
 //左滑 
 self.rightImageView.layer.transformScale = 1 + 1.0/9*(fabs(offScale)/OFFSET_MAX); 
 self.middleImageView.layer.transformScale = 1 - 0.1*(fabs(offScale)/OFFSET_MAX); 
 } 
 
} 
 
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { 
 CGPoint offset = scrollView.contentOffset; 
 
 self.offsetX = offset.x; 
 
 if ((fabs(self.offsetX-OFFSET_MAX) >= OFFSET_MAX*0.5)) { 
 if (!decelerate) { 
 //替換圖片 
 [self exchangeImage]; 
 } 
 } else { 
 //回彈復位 
 [scrollView setContentOffset:CGPointMake(OFFSET_MAX, 0) animated:YES]; 
 self.leftIamgeView.layer.transform = CATransform3DIdentity; 
 self.middleImageView.layer.transform = CATransform3DIdentity; 
 self.rightImageView.layer.transform = CATransform3DIdentity; 
 } 
} 
 
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
 //替換圖片 
 [self exchangeImage]; 
} 
 
#pragma mark ---------- exchangeImage ------ 
//替換圖片 
- (void)exchangeImage { 
 if (self.offsetX-OFFSET_MAX < 0) { 
 //右滑 
 UIImage *rightImage = self.rightImageView.image; 
 self.rightImageView.image = self.middleImageView.image; 
 self.middleImageView.image = self.leftIamgeView.image; 
 self.leftIamgeView.image = rightImage; 
 
 if (self.pageControl.currentPage - 1 < 0) { 
 self.pageControl.currentPage = self.pageControl.numberOfPages-1; 
 } else { 
 self.pageControl.currentPage -= 1; 
 } 
 
 } else { 
 //左滑 
 UIImage *leftImage = self.leftIamgeView.image; 
 self.leftIamgeView.image = self.middleImageView.image; 
 self.middleImageView.image = self.rightImageView.image; 
 self.rightImageView.image = leftImage; 
 
 if (self.pageControl.currentPage + 1 >= self.pageControl.numberOfPages) { 
 self.pageControl.currentPage = 0; 
 } else { 
 self.pageControl.currentPage += 1; 
 } 
 } 
 [self.scrollView setContentOffset:CGPointMake(OFFSET_MAX, 0)]; 
 self.leftIamgeView.layer.transform = CATransform3DIdentity; 
 self.middleImageView.layer.transform = CATransform3DIdentity; 
 self.rightImageView.layer.transform = CATransform3DIdentity; 
} 
 
#pragma mark ---------- timer -------- 
- (void)timerAction { 
 self.offsetX = kScreenWidth+OFFSET_MAX-64; 
 
 self.timerAnimation = YES; 
 [UIView animateWithDuration:0.8 animations:^{ 
 [self.scrollView setContentOffset:CGPointMake(self.offsetX, 0)]; 
 self.rightImageView.layer.transformScale = 10/9.0; 
 self.middleImageView.layer.transformScale = 0.9; 
 } completion:^(BOOL finished) { 
 self.timerAnimation = NO; 
 [self exchangeImage]; 
 self.rightImageView.layer.transform = CATransform3DIdentity; 
 self.middleImageView.layer.transform = CATransform3DIdentity; 
 }]; 
} 
 
@end 

最后調用:

self.scrollView = [[CustomScrollView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 170)]; 
[self.view addSubview:self.scrollView]; 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • iOS 動畫實戰(zhàn)之釣魚小游戲實例代碼

    iOS 動畫實戰(zhàn)之釣魚小游戲實例代碼

    最近小編做了一個釣魚小游戲,平時沒有做過,所以上手有點急躁,不過,最終還是實現(xiàn)了,下面小編給大家分享iOS 動畫實戰(zhàn)之釣魚小游戲的實現(xiàn)思路,感興趣的朋友一起看看吧
    2018-02-02
  • IOS self和super詳解實現(xiàn)原理及區(qū)別

    IOS self和super詳解實現(xiàn)原理及區(qū)別

    這篇文章主要介紹了iOS self和super詳解實現(xiàn)原理及區(qū)別的相關資料,這里不僅說明區(qū)別并介紹實現(xiàn)原理,具有參考價值,需要的朋友可以參考下
    2016-12-12
  • iOS Label隨字自動變大效果

    iOS Label隨字自動變大效果

    這篇文章主要為大家詳細介紹了iOS Label隨字自動變大效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • iOS-GCD使用詳解及實例解析

    iOS-GCD使用詳解及實例解析

    這篇文章主要介紹了iOS-GCD使用詳解及實例解析的相關資料,需要的朋友可以參考下
    2016-11-11
  • iOS輸入框的字數(shù)統(tǒng)計/最大長度限制詳解

    iOS輸入框的字數(shù)統(tǒng)計/最大長度限制詳解

    在開發(fā)中經(jīng)常會遇到鍵盤輸入的字符長度的限制,下面這篇文章主要給大家介紹了關于iOS輸入框的字數(shù)統(tǒng)計/最大長度限制的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2018-06-06
  • iOS10 推送最新特性研究

    iOS10 推送最新特性研究

    這篇文章主要為大家詳細研究了iOS10 推送的最新特性,推送內容更加豐富,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 混合棧跳轉導致Flutter頁面事件卡死問題解決

    混合棧跳轉導致Flutter頁面事件卡死問題解決

    這篇文章主要為大家介紹了混合棧跳轉導致Flutter頁面事件卡死問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • IOS中MMDrawerController第三方抽屜效果的基本使用示例

    IOS中MMDrawerController第三方抽屜效果的基本使用示例

    這篇文章主要介紹了IOS中MMDrawerController第三方抽屜效果的基本使用示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • 利用iOS開發(fā)實現(xiàn)翻轉撲克牌動畫的方法

    利用iOS開發(fā)實現(xiàn)翻轉撲克牌動畫的方法

    這篇文章主要給大家介紹了關于利用iOS開發(fā)實現(xiàn)翻撲克牌動畫的方法,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來跟著小編一起學習學習吧。
    2017-07-07
  • 快速解決低版本Xcode不支持高版本iOS真機調試的問題方法

    快速解決低版本Xcode不支持高版本iOS真機調試的問題方法

    這篇文章主要介紹了快速解決低版本Xcode不支持高版本iOS真機調試的問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02

最新評論