ScrollView循環(huán)滑動

self.view.clipsToBounds = YES;//去掉這句退出頁面時會有圖片殘留

使用到的全局變量:

@implementation ContinueScrollView
{
    UIScrollView *myScrollView;
    NSArray *images;
    UIImageView *leftImgV;//ScrollView由三張圖構(gòu)成,循環(huán)使用
    UIImageView *centerImgV;
    UIImageView *rightImgV;
    NSInteger currentImageIndex;//當前圖片下標
    UIPageControl *pageControl;
}

遵守<UIViewControllerPreviewingDelegate>協(xié)議

- (void)createView {
    myScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(kScaleX*47.5, 64 + kScaleY*50, kScaleX*280, kScaleY*450)];
    myScrollView.delegate = self;
    myScrollView.pagingEnabled = YES;
    myScrollView.showsHorizontalScrollIndicator = NO;
    myScrollView.clipsToBounds = NO;
    NSInteger imageCount = images.count > 2 ? images.count : 3;//contentSize至少為ScrollView寬度的3倍,少于3張圖也要把contentSize補到3倍寬
    myScrollView.contentSize = CGSizeMake(myScrollView.frame.size.width * imageCount, 0);
    myScrollView.contentOffset = CGPointMake(myScrollView.frame.size.width, 0);
    [self.view addSubview:myScrollView];
    
    //3DTouch
    if ([self respondsToSelector:@selector(traitCollection)]) {
        if ([self.traitCollection respondsToSelector:@selector(forceTouchCapability)]) {
            if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
                [self registerForPreviewingWithDelegate:self sourceView:myScrollView];
            }
        }
    }
    
    //圖片視圖:左邊
    leftImgV = [[UIImageView alloc]initWithFrame:CGRectMake(kScaleX*15, 0, myScrollView.frame.size.width - kScaleX*30, myScrollView.frame.size.height)];
    leftImgV.contentMode = UIViewContentModeScaleAspectFill;
    leftImgV.clipsToBounds = YES;
    [myScrollView addSubview:leftImgV];
    
    //圖片視圖:中間
    centerImgV = [[UIImageView alloc]initWithFrame:CGRectMake(kScaleX*15 + myScrollView.frame.size.width, 0, myScrollView.frame.size.width - kScaleX*30, myScrollView.frame.size.height)];
    centerImgV.contentMode = UIViewContentModeScaleAspectFill;
    centerImgV.clipsToBounds = YES;
    [myScrollView addSubview:centerImgV];
    
    //圖片視圖:右邊
    rightImgV = [[UIImageView alloc]initWithFrame:CGRectMake(kScaleX*15 + myScrollView.frame.size.width*2, 0, myScrollView.frame.size.width - kScaleX*30, myScrollView.frame.size.height)];
    rightImgV.contentMode = UIViewContentModeScaleAspectFill;
    rightImgV.clipsToBounds = YES;
    [myScrollView addSubview:rightImgV];
    
    pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(myScrollView.frame.origin.x, CGRectGetMaxY(myScrollView.frame)-kScaleY*30, myScrollView.frame.size.width, kScaleY*30)];
    pageControl.numberOfPages = images.count;
    pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
    pageControl.currentPageIndicatorTintColor = [UIColor whiteColor];
    [self.view addSubview:pageControl];
    
    currentImageIndex = 0;
    [self setInfoByCurrentImageIndex:currentImageIndex];
}
- (void)setInfoByCurrentImageIndex:(NSInteger)index {
    leftImgV.image = [UIImage imageNamed:images[(index - 1 + images.count) % images.count]];
    
    centerImgV.image = [UIImage imageNamed:images[index]];
    
    rightImgV.image = [UIImage imageNamed:images[(index + 1 + images.count) % images.count]];
    
    pageControl.currentPage = index;
}
- (void)reloadImage {
    CGPoint contentOffset = myScrollView.contentOffset;
    if (contentOffset.x > myScrollView.frame.size.width) { //向左滑動
        currentImageIndex = (currentImageIndex + 1) % images.count;
    }else if (contentOffset.x < myScrollView.frame.size.width) { //向右滑動
        currentImageIndex = (currentImageIndex - 1 + images.count) % images.count;
    }

    [self setInfoByCurrentImageIndex:currentImageIndex];
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    if (scrollView == myScrollView) {
        [self reloadImage];
        
        myScrollView.contentOffset = CGPointMake(myScrollView.frame.size.width, 0);
    }
}
#pragma mark - UIViewControllerPreviewingDelegate
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location {
    //previewingContext.sourceView: 觸發(fā)Peek & Pop操作的視圖
    //previewingContext.sourceRect: 設(shè)置觸發(fā)操作的視圖的不被虛化的區(qū)域
    ShowImageViewController *showimgvc = [[ShowImageViewController alloc]init];
    //showimgvc.preferredContentSize = CGSizeMake(0, 300);//預覽區(qū)域大小(可不設(shè)置)
    showimgvc.myImage = [UIImage imageNamed:images[currentImageIndex]];
    return showimgvc;
}

- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
    [self.navigationController pushViewController:viewControllerToCommit animated:YES];
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容