2012-12-05 85 views
7

我有一個UIScrollView加載三個不同的頁面。
當我放大頁面並縮小到原始大小時,應用程序會停止讓我在頁面之間滾動,就好像分頁已禁用一樣。當縮小到原始大小(Scale == 1)時,我能做些什麼來重新啓用分頁?

這是我的代碼
在縮放後啓用分頁UIScrollView

- (void)viewDidLoad 
{ 
    [ScView setMaximumZoomScale : 2.0f]; 
    [ScView setMinimumZoomScale : 1.0f]; 

    ScView.contentSize = CGSizeMake(1024*3, 1.0); 
    ScView.pagingEnabled = YES; 

    ScView.clipsToBounds = YES; 
    ScView.delegate = self; 

    ScView.showsHorizontalScrollIndicator = NO; 
    ScView.showsVerticalScrollIndicator = NO; 

    [super viewDidLoad]; 

    [self returnImages]; 
} 

-(void)returnImages{ 
    for (pageNumber = 1; pageNumber <= 3; pageNumber++) { 
     imagen = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d.png",pageNumber]]]; 
     imagen.frame = CGRectMake((pageNumber-1)*1024, 0, 1024, 768); 

     [ScView addSubview:imagen]; 
    } 
} 

// 
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ 
     return ScView; 
    // return [imagen initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d.png",pageNumber]]]; 
} 

- (void)scrollViewWillBeginZooming:(UIScrollView *)myScrollView withView:(UIView *)view 
{ 
    NSLog(@"Scroll Will Begin"); 
    ScView.scrollEnabled = YES; 
} 

- (void)scrollViewDidEndZooming:(UIScrollView *)myScrollView withView:(UIView *)view atScale:(float)scale 
{ 
    if(scale == 1) 
    { 
     ScView.scrollEnabled = YES; 
     ScView.pagingEnabled = YES; 
     [self returnImages]; 
     NSLog(@"Scrolol will end"); 
     //ScView.maximumZoomScale = 2.0f; 
     // [super viewDidLoad]; 

     [self returnImages]; 
    } 
} 

任何想法將不勝感激..

回答

18

爲了得到正確的分頁和縮放已嵌入UIScrollView中的每一頁到您的父母UIScrollView的。這種組合將允許您同時使用分頁和內部滾動。

下面是帶有父滾動視圖和三個嵌入的可縮放頁面的UIViewController的示例。

#define VIEW_FOR_ZOOM_TAG (1) 

@implementation SVViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIScrollView *mainScrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds]; 
    mainScrollView.pagingEnabled = YES; 
    mainScrollView.showsHorizontalScrollIndicator = NO; 
    mainScrollView.showsVerticalScrollIndicator = NO; 

    CGRect innerScrollFrame = mainScrollView.bounds; 

    for (NSInteger i = 0; i < 3; i++) { 
     UIImageView *imageForZooming = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"page%d", i + 1]]]; 
     imageForZooming.tag = VIEW_FOR_ZOOM_TAG; 

     UIScrollView *pageScrollView = [[UIScrollView alloc] initWithFrame:innerScrollFrame]; 
     pageScrollView.minimumZoomScale = 1.0f; 
     pageScrollView.maximumZoomScale = 2.0f; 
     pageScrollView.zoomScale = 1.0f; 
     pageScrollView.contentSize = imageForZooming.bounds.size; 
     pageScrollView.delegate = self; 
     pageScrollView.showsHorizontalScrollIndicator = NO; 
     pageScrollView.showsVerticalScrollIndicator = NO; 
     [pageScrollView addSubview:imageForZooming]; 

     [mainScrollView addSubview:pageScrollView]; 

     if (i < 2) { 
      innerScrollFrame.origin.x += innerScrollFrame.size.width; 
     } 
    } 

    mainScrollView.contentSize = CGSizeMake(innerScrollFrame.origin.x + innerScrollFrame.size.width, mainScrollView.bounds.size.height); 

    [self.view addSubview:mainScrollView]; 
} 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { 
    return [scrollView viewWithTag:VIEW_FOR_ZOOM_TAG]; 
} 

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskPortrait; 
} 

- (BOOL)shouldAutorotate { 
    return NO; 
} 

@end 
2

我跟着@NikNarmo的解決方案,寫一個小的迅速xcode項目演示縮放和翻頁功能。

希望能幫助任何想要完成相同任務的人。

一些代碼是從UIScrollView的教程:入門http://www.raywenderlich.com/76436/use-uiscrollview-scroll-zoom-content-swift

和一些從一個初學者指南的UIScrollView http://www.appcoda.com/uiscrollview-introduction/

使用的Xcode 7.0和雨燕2.0

override func viewDidLoad() { 

    super.viewDidLoad() 

    mainScrollView = UIScrollView(frame: self.view.bounds) 
    mainScrollView.pagingEnabled = true 
    mainScrollView.showsHorizontalScrollIndicator = false 
    mainScrollView.showsVerticalScrollIndicator = false 

    pageScrollViews = [UIScrollView?](count: photos.count, repeatedValue: nil) 

    let innerScrollFrame = mainScrollView.bounds 

    mainScrollView.contentSize = 
     CGSizeMake(innerScrollFrame.origin.x + innerScrollFrame.size.width, 
      mainScrollView.bounds.size.height) 

    mainScrollView.backgroundColor = UIColor.redColor() 
    mainScrollView.delegate = self 
    self.view.addSubview(mainScrollView) 

    configScrollView() 
    addPageControlOnScrollView() 
} 

和神奇的是在FUNC scrollViewWillEndDragging,當contentSize等於mainScrollViewContentSize與否,如果是mainScrollViewController,然後做分頁,否則什麼也不做。

func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) { 

    let targetOffset = targetContentOffset.memory.x 
    let zoomRatio = scrollView.contentSize.height/mainScrollViewContentSize.height 

    if zoomRatio == 1 { 
     // mainScrollViewController 
     let mainScrollViewWidthPerPage = mainScrollViewContentSize.width/CGFloat(pageControl.numberOfPages) 

     let currentPage = targetOffset/(mainScrollViewWidthPerPage * zoomRatio) 
     pageControl.currentPage = Int(currentPage) 
     loadVisiblePages() 

    } 
    else { 
     // pageScorllViewController 
    } 
} 

這裏是項目代碼https://github.com/Charles-Hsu/ScrollViewDemo

+0

如何連接斯威夫特碼故事情節?我下載了你的整個項目代碼,但注意到你的故事板只是一個View Controller。 – user2872856

+0

這是我的問題:http://stackoverflow.com/questions/34449359/zoom-images-in-paged-uiscrollview – user2872856

+0

問題解決了。感謝您的代碼。 – user2872856