2012-12-05 15 views
7

Üç farklı sayfa yükleyen bir UIScrollView sahibim.
Bir sayfaya yakınlaştırdığımda ve orijinal boyutuna geri döndüğümde, sayfalar arasında gezinme, sanki sayfalama devre dışı bırakılmış gibi durur. Orijinal boyuta getirildiğinde sayfalama özelliğini yeniden etkinleştirmek için ne yapabilirim (Ölçek == 1)?

Bu benim kod
Yakınlaştırdıktan Sonra UIScrollView'de Görüntülemeyi Etkinleştir

- (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]; 
    } 
} 

Herhangi bir fikir çok takdir edilecektir ..

cevap

18

uygun paging almak için ve sizin ana UIScrollView içine her sayfa için UIScrollView gömmek var yakınlaştırma olduğunu. Bu kombinasyon, aynı anda sayfalama ve dahili kaydırmayı kullanmanıza izin verecektir.

Ebeveyn kaydırma görünümü ve üç yerleşik zumlanabilir sayfa içeren UIViewController örneği.

#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

ben yakınlaştırma ve sayfalama fonksiyonu demo küçük hızlı xcode proje yazma, @NikNarmo 'ın çözümü uygulayın.

Aynı işi yapmak isteyen herkese yardımcı olmayı umarım.

Bazı kod UIScrollView Öğrencesindeki geçerli: UIScrollView http://www.appcoda.com/uiscrollview-introduction/ Yeni Başlayanlar Kılavuzu

ve bazı http://www.raywenderlich.com/76436/use-uiscrollview-scroll-zoom-content-swift, Başlarken. o mainScrollViewController ardından sayfalama yapmak ise contentSize aksi hiçbir şey, mainScrollViewContentSize eşit olup olmadığının Xcode 7.0 ve Swift 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() 
} 

ve büyü kullanma

, fonk scrollViewWillEndDragging içindedir. Burada

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 
    } 
} 

Ve

proje kodu Swift kodu storyboarda bağlama

+0

https://github.com/Charles-Hsu/ScrollViewDemo mı? Tüm proje kodunuzu indirdim, ancak hikaye tahtanızın yalnızca bir Görünüm Denetleyicisi olduğunu fark ettim. – user2872856

+0

Bu benim sorum: http://stackoverflow.com/questions/34449359/zoom-images-in-paged-uiscrollview – user2872856

+0

Sorun çözüldü. Kodunuz için teşekkürler. – user2872856

İlgili konular