2012-12-05 10 views
7

UIScrollViewには3つの異なるページが読み込まれています。
ページをズームインして元のサイズにズームアウトすると、ページングが無効になっているかのように、アプリケーション間でページ間をスクロールできなくなります。元のサイズにズームアウトしたときにページングを再度有効にするにはどうすればよいですか(スケール== 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のを埋め込むことしているズームです。この組み合わせにより、ページングと内部スクロールを同時に使用できます。

親スクロールビューと3つの埋め込みズーム可能なページを持つ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プロジェクトを作成します。

同じ仕事をしたいと思っている人を助けることを願っています。 http://www.raywenderlich.com/76436/use-uiscrollview-scroll-zoom-content-swiftをはじめ、

とUIScrollViewのhttp://www.appcoda.com/uiscrollview-introduction/ビギナーズガイドからいくつか:

いくつかのコードは、UIScrollViewのチュートリアルからです。 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() 
} 

や魔法を使用して

は、そうでない場合は何もしない、それはmainScrollViewControllerある場合は、ページングを行う、contentSizeがmainScrollViewContentSizeに等しいかないとき、FUNCのscrollViewWillEndDraggingです。

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

関連する問題