簡體   English   中英

ScrollView中的ScrollView縮放時面臨異常

[英]Facing Exception in ScrollView Zooming with paging

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

由於未捕獲的異常“ 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;
    }

}

UIImageView沒有setGestureDelegate方法-當您在名為scrollView1的變量上調用此方法時,我假設您不希望這是UIImage- Simon可能是正確的; 您將在某個地方錯誤地釋放它。

然而,

UIScrollView也不具有setGestureDelegate方法,因此您可能仍然有問題。

你想做什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM