2011-06-02 112 views
2

我有一个UIScrollView有启用分页等等......我添加一个UIImageView的删除按钮,它被添加到UIScrollView。但是,当我从库中添加三个图像到scrollView,然后通过按删除按钮删除它们,它可以正常工作。但是,当我再次做同样的过程,它的叶子上的UIScrollView的UIImageViews仍然即使的PageControl的numberofpages为0UIScrollView删除不能正常工作

请你能告诉我什么,我做错了:

- (void) updateScrollView { 
    CGRect currentFrame = self.scrollView.frame; 
    currentFrame.origin.x = 0; 
    numberOfPages = [[self selectedImages] count]; 
    if ([self.selectedImages count] > 0) { 
    for (UIImage *image in [self selectedImages]) { 
      UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
      [btn setImage:[UIImage imageNamed:@"Delete.png"] forState:UIControlStateNormal]; 
      [btn setFrame:CGRectMake(0, 0, 30, 30)]; 
      [btn setTag:[[self selectedImages] indexOfObject:image]]; 
      [btn addTarget:self action:@selector(removeImageView:) forControlEvents:UIControlEventTouchUpInside]; 
      UIImageView *imagev = [[UIImageView alloc] initWithImage:image]; 
      [imagev setContentMode:UIViewContentModeScaleAspectFit]; 
      [imagev setFrame:currentFrame]; 
      [imagev addSubview:btn]; 
      [imagev setUserInteractionEnabled:YES]; 
      [self.scrollView addSubview:imagev]; 
      [imagev release]; 
      currentFrame.origin.x = currentFrame.origin.x + currentFrame.size.width; 
     } 
    } 
    else { 
     [self.selectedImages removeAllObjects]; 
     for (int i = 0; i < [self.scrollView.subviews count]; i++) { 
      [[self.scrollView.subviews objectAtIndex:i] removeFromSuperview]; 
     } 
     return; 
    } 
    self.pageControl.numberOfPages = [self.selectedImages count]; 
    [self.scrollView setPagingEnabled:YES]; 
    [self.scrollView setContentSize:CGSizeMake(currentFrame.origin.x, currentFrame.size.height)]; 
} 
- (void) removeImageView:(UIButton *)sender { 
    if ([self.selectedImages count] >= 1) { 
     int i = sender.tag; 
     id superv = [sender superview]; 
     [superv removeFromSuperview]; 
     [self.selectedImages removeObjectAtIndex:i]; 
     [self updateScrollView]; 
    } 
    else { 
     [self.selectedImages removeAllObjects]; 
    } 
    return; 
} 
- (void) scrollViewDidScroll:(UIScrollView *)scrollView { 
    CGFloat pageWidth = scrollView.frame.size.width; 
    currentPage = floor((scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
    [self.pageControl setCurrentPage:currentPage]; 
    return; 
} 
- (void) updatePageControl:(id)sender { 
    UIPageControl *pg = (UIPageControl *)sender; 
    CGRect frame = self.scrollView.frame; 
    frame.origin.x = frame.size.width * pg.currentPage; 
    frame.origin.y = 0; 
    [self.scrollView scrollRectToVisible:frame animated:YES]; 
} 
- (void) removeObject:(id)object { 
    [self.selectedImages removeObject:object]; 
    [self updateScrollView]; 
    [self updatePageControl:self.pageControl]; 
    CGFloat pageWidth = self.scrollView.frame.size.width; 
    currentPage = floor((self.scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
    [self.pageControl setCurrentPage:currentPage]; 

    return; 
} 

回答

0

在删除第一个图像视图,你在调用updateScrollView,你还剩下2个图像。在updateScrollView中,如果条件评估为YES,并且您将添加另外两个图像以滚动视图,那么现在有两对图像。当下一个被删除时,您删除两个图像并添加4个。

此外,请注意UIScrollView在其子视图数组中保持滚动条,所以这是不好的。

for (int i = 0; i < [self.scrollView.subviews count]; i++) { 
      [[self.scrollView.subviews objectAtIndex:i] removeFromSuperview]; 
} 

在继续之前,您应该抛光此代码。在每个方法或NSLog(@“%s”,__ FUNCTION __)上放置断点; (删除下划线和FUNCTION之间的空格),并了解每个方法的开始时间和由谁来调用。当你开始理解代码是如何工作的时候,你的原始问题的解决方案将会出现。不幸的是,我忘了提及你如何“再次进行同样的过程”,因此我无法帮助你。