2012-12-05 17 views
7

के बाद UIScrollView में पेजिंग सक्षम करें मेरे पास UIScrollView है जो तीन अलग-अलग पृष्ठों को लोड करता है।
जब मैं किसी पृष्ठ पर ज़ूम इन करता हूं, और मूल आकार पर ज़ूम आउट करता हूं, तो एप्लिकेशन पेजों के बीच स्क्रॉल करने देता है, जैसे कि पेजिंग अक्षम है। मूल आकार (स्केल == 1) ज़ूम आउट करते समय पेजिंग को पुन: सक्षम करने के लिए मैं क्या कर सकता हूं?

यह मेरा कोड
ज़ूमिंग

- (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 ट्यूटोरियल से है: UIScrollView http://www.appcoda.com/uiscrollview-introduction/ के लिए एक प्रारंभिक मार्गदर्शिका से http://www.raywenderlich.com/76436/use-uiscrollview-scroll-zoom-content-swift,

और कुछ प्रारंभ करना।

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

और जादू का उपयोग करना, समारोह scrollViewWillEndDragging में है अगर यह mainScrollViewController, तो पेजिंग करना है जब contentSize mainScrollViewContentSize के बराबर है या नहीं,, नहीं तो कुछ भी नहीं।

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

स्विफ्ट कोड स्टोरीबोर्ड से कनेक्ट करने कैसी है? मैंने आपका पूरा प्रोजेक्ट कोड डाउनलोड किया लेकिन ध्यान दिया कि आपका स्टोरीबोर्ड सिर्फ एक व्यू कंट्रोलर है। – user2872856

+0

यह मेरा प्रश्न है: http://stackoverflow.com/questions/34449359/zoom-images-in-paged-uiscrollview – user2872856

+0

समस्या हल हो गई। आपके कोड के लिए धन्यवाद – user2872856

संबंधित मुद्दे