2011-02-08 72 views
0

我使用Scrolling Madness示例,其中我在代碼中實現分頁和縮放縮放部分,但是我的應用程序崩潰時出現異常。在ScrollView中面對異常使用分頁縮放

終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是: ' - [UIImage的setGestureDelegate:]:無法識別的選擇發送到實例0x68a6c00'

- (CGSize)pageSize { 
    CGSize pageSize = scrollView1.frame.size; 
    //if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) 
     //return CGSizeMake(pageSize.height, pageSize.width); 
    //else 
     return pageSize; 
} 


- (void)setPagingMode { 
    // reposition pages side by side, add them back to the view 
    CGSize pageSize = [self pageSize]; 
    NSUInteger page = 0; 
    for(UIView *imgview in [scrollView1 subviews]) 
    { 
     if([imgview isKindOfClass:[UIImageView class]]) 
     { 
      imgview.frame = CGRectMake(pageSize.width * page++, 0, pageSize.width, pageSize.height); 
     } 
    } 

    scrollView1.pagingEnabled = YES; 
    scrollView1.showsVerticalScrollIndicator = scrollView1.showsHorizontalScrollIndicator = NO; 
    scrollView1.contentSize = CGSizeMake(pageSize.width * [largeImageArr count], pageSize.height); 
    scrollView1.contentOffset = CGPointMake(pageSize.width * currentPage, 0); 

    scrollViewMode = ScrollViewModePaging; 
} 

- (void)setZoomingMode { 
    NSLog(@"setZoomingMode"); 
    scrollViewMode = ScrollViewModeZooming; // has to be set early, or else currentPage will be mistakenly reset by scrollViewDidScroll 

    // hide all pages except the current one 
    //NSUInteger page = 0; 
    //UIImageView *imgview; 
    for(UIView *imgview in [scrollView1 subviews]) 
    { 
     if([imgview isKindOfClass:[UIImageView class]]) 
     { 
      [(UIImageView *)imgview removeFromSuperview]; 

     } 
    } 

    //[scrollView1 setEnabledGestures:YES]; 
    //[scrollView1 setGestureDelegate:self]; 
    scrollView1.pagingEnabled = NO; 
    scrollView1.showsVerticalScrollIndicator = scrollView1.showsHorizontalScrollIndicator = YES; 
    pendingOffsetDelta = scrollView1.contentOffset.x; 
    scrollView1.bouncesZoom = YES; 
} 


- (void)setCurrentPage:(NSUInteger)page { 
    if (page == currentPage) 
     return; 
    currentPage = page; 
    // in a real app, this would be a good place to instantiate more view controllers -- see SDK examples 
} 

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView { 
    if (scrollViewMode == ScrollViewModePaging) 
     [self setCurrentPage:roundf(scrollView1.contentOffset.x/[self pageSize].width)]; 
} 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)aScrollView { 
    NSLog(@"viewForZoomingInScrollView"); 
    if (scrollViewMode != ScrollViewModeZooming) 
     [self setZoomingMode]; 
    return [largeImageArr objectAtIndex:currentPage]; 
} 

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale { 
    //[scrollView setZoomScale:scale+0.01 animated:NO]; 
    //[scrollView setZoomScale:scale animated:NO]; 

    NSLog(@"scrollViewDidEndZooming"); 
    if (scrollView1.zoomScale == scrollView1.minimumZoomScale) 
     [self setPagingMode]; 
    else if (pendingOffsetDelta > 0) { 
     UIView *view = [largeImageArr objectAtIndex:currentPage]; 
     view.center = CGPointMake(view.center.x - pendingOffsetDelta, view.center.y); 
     CGSize pageSize = [self pageSize]; 
     scrollView1.contentOffset = CGPointMake(scrollView1.contentOffset.x - pendingOffsetDelta, scrollView1.contentOffset.y); 
     scrollView1.contentSize = CGSizeMake(pageSize.width * scrollView1.zoomScale, pageSize.height * scrollView1.zoomScale); 
     pendingOffsetDelta = 0; 
    } 

} 
+0

可能您並未保留滾動視圖。在哪裏創建滾動視圖? – EmptyStack 2011-02-08 06:46:07

回答

0

的UIImageView沒有setGestureDelegate方法 - 爲你」重新調用這個名爲scrollView1的變量我假設你沒有想到這是一個UIImage - Simon可能是正確的;你會在某處錯誤地發佈它。

然而,

UIScrollView沒有方法setGestureDelegate要麼所以你仍然可能有問題。

你想做什麼?