2012-08-16 80 views
0

我有UIScrollView在階段和尋呼功能啓用回來/下一步。UIScrollView內容不更新

我在UIScrollView中添加了10個子視圖。當我修改子視圖內的內容時,它不會反映在UIScrollView中。

Book.m 

- (void) initializeWithXML:(NSString *)XMLURLString { 
    NSData *xmlData; 
    NSString *url; 
    if (![applicationData getMode]) { 
     resourceRootURL = [[applicationData getAssetsPath] stringByAppendingPathComponent:@"phone/"]; 
    } else { 
     resourceRootURL = [applicationData getAssetsPath]; 
    } 
    url = [resourceRootURL stringByAppendingPathComponent:XMLURLString];  
    //NSLog(@"Root URL...%@", url); 

    if ([url rangeOfString:@"http"].location != NSNotFound) { 
     xmlData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]]; 
    } else { 
     xmlData = [NSData dataWithContentsOfFile:url]; 
    } 
    bookContentArray = [self grabXML:xmlData andQuery:@"//page"]; 
    // view controllers are created lazily 
    // in the meantime, load the array with placeholders which will be replaced on demand 
    NSMutableArray *controllers = [[NSMutableArray alloc] init]; 
    for (unsigned i = 0; i < kNumberOfPages; i++) { 
     [controllers addObject:[NSNull null]]; 
    } 
    self.viewControllers = controllers; 
    [controllers release]; 

    for(int i = 0; i < [bookContentArray count]; i++) { 
     [viewControllers addObject:[NSNull null]]; 
    } 

    if (isTwoPage) { 
     kNumberOfPages = [bookContentArray count]; 
    } else { 
     kNumberOfPages = [bookContentArray count]/2; 
    } 
    CGRect pagingScrollViewFrame = [self frameForPagingScrollView]; 
    scrollView = [[UIScrollView alloc] initWithFrame:pagingScrollViewFrame]; 
    scrollView.pagingEnabled = YES; 
    scrollView.backgroundColor = [UIColor blackColor]; 
    scrollView.showsVerticalScrollIndicator = NO; 
    scrollView.showsHorizontalScrollIndicator = NO; 
    scrollView.contentSize = [self contentSizeForPagingScrollView]; 
    scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,scrollView.frame.size.height); 
    scrollView.delegate = self; 
    self.view = scrollView; 


    kNumberOfPages = [bookContentArray count]; 
    pageControl.numberOfPages = kNumberOfPages; 
    pageControl.currentPage = 0; 

    // pages are created on demand 
    // load the visible page 
    // load the page on either side to avoid flashes when the user starts scrolling 
    [self loadPage:0]; 
} 

- (void) loadPage:(int)number { 
    // Calculate which pages are visible 
    int firstNeededPageIndex = MAX(number-1, 0); 
    int lastNeededPageIndex = MIN(number+1, [viewControllers count] - 1); 
    //NSLog(@"%d,%d",firstNeededPageIndex,lastNeededPageIndex); 
    // Recycle no-longer-visible pages 
    for(int i = 0; i < [viewControllers count]; i++) { 
     ImageScrollView *page = [viewControllers objectAtIndex:i]; 
     if ((NSNull *)page != [NSNull null]) { 
      if (page.index < firstNeededPageIndex || page.index > lastNeededPageIndex) { 
       //NSLog(@"removed page %d", page.index); 
       [page removeImages]; 
       [page removeFromSuperview]; 
       page = nil; 
       [viewControllers replaceObjectAtIndex:i withObject:[NSNull null]]; 
      } 
     } 
    } 

    // load the visible page and the page on either side of it (to avoid flashes when the user starts scrolling) 
    if (number == 0) { 
     [self loadScrollViewWithPage:number]; 
     [self loadScrollViewWithPage:number+1]; 
    } else if (number == [bookContentArray count]-1) { 
     [self loadScrollViewWithPage:number-1]; 
     [self loadScrollViewWithPage:number]; 
    } else { 
     [self loadScrollViewWithPage:number-1]; 
     [self loadScrollViewWithPage:number]; 
     [self loadScrollViewWithPage:number+1]; 
    } 

} 

- (void)loadScrollViewWithPage:(int)page { 
    ImageScrollView *pageController = [[ImageScrollView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)]; 
    pageController.index = page; 
    pageController.myDelegate = self; 
    pageNumber = pageControl.currentPage; 
    pageController.isTwoPage = isTwoPage; 
    if (pageNumber == page) {   
     pageController.isCurrentPage = YES; 
    } else { 
     pageController.isCurrentPage = NO; 
    } 
    [controller setImageURL:leftURL andRightURL:rightURL andPriority:0]; 
    [scrollView addSubview:controller]; 
} 

ImageScrollView.m 
- (void) setImageURL:(NSString *)leftURL andRightURL:(NSString *)rightURL andPriority:(int)priority { 

    [imageView removeFromSuperview]; 
    [imageView release]; 
    imageView = nil; 
    if (!isTwoPage) { 
     imageView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)]; 
    } else { 
     imageView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)]; 
    } 


    if (isTwoPage) { 
     leftImage = [[FBEPage alloc] initWithNibName:@"FBEPage" bundle:nil]; 
     leftImage.view.frame = CGRectMake(0, 43, 512, 682); 
     rightImage = [[FBEPage alloc] initWithNibName:@"FBEPage" bundle:nil]; 
     rightImage.view.frame = CGRectMake(512, 43, 512, 682); 
    } else { 
     leftImage = [[FBEPage alloc] initWithNibName:@"FBEPage" bundle:nil]; 
     leftImage.view.frame = imageView.frame; 
     rightImage = [[FBEPage alloc] initWithNibName:@"FBEPage" bundle:nil]; 
     rightImage.view.frame = imageView.frame;   
    } 
    leftImage.delegate = self; 
    rightImage.delegate = self; 
    if (isFirstPage) { 
     [leftImage.view setHidden:YES]; 
     [rightImage.view setHidden:NO]; 
    } else if (isLastPage) { 
     [leftImage.view setHidden:NO]; 
     [rightImage.view setHidden:YES]; 
    } else if (!isTwoPage) { 
     [leftImage.view setHidden:NO]; 
     [rightImage.view setHidden:YES]; 
    } else { 
     [leftImage.view setHidden:NO]; 
     [rightImage.view setHidden:NO]; 
    } 


    imageView.backgroundColor = [UIColor whiteColor]; 



    [self addSubview:imageView]; 



    [leftImage setImageURL:leftURL]; 
    [rightImage setImageURL:rightURL]; 

    [imageView addSubview:leftImage.view]; 
    [imageView addSubview:rightImage.view]; 

} 

FBPage.m 
- (void) setImageURL:(NSString *)url { 
    imageView = [[UIImageView alloc] init]; 
    imageView.frame = CGRectMake(0, 0, 768, 1024);  
    imageView.center = self.view.center;  
    imageView.userInteractionEnabled = TRUE; 
    [container addSubview:imageView]; 
    [activityIndicator setHidden:YES]; 
    if ([url rangeOfString:@"http"].location != NSNotFound) { 
      SDWebImageManager *manager = [SDWebImageManager sharedManager]; 
      UIImage *cachedImage = [manager imageWithURL:[NSURL URLWithString:url]]; 
      if (cachedImage) { 
       [imageView setImage:cachedImage]; 
       isImageLoaded = YES; 
       [self addScrollView]; 
      } else { 
       [activityIndicator setHidden:NO]; 
       [activityIndicator startAnimating]; 
       [manager downloadWithURL:[NSURL URLWithString:url] delegate:self options:0 success:^(UIImage *image){ 
       [activityIndicator stopAnimating]; 
       [activityIndicator setHidden:YES]; 
       [imageView setImage:image]; 
       isImageLoaded = YES; 
       [self addScrollView]; 
      } failure:nil]; 
     } 
     imageURL = url; 
    } else { 
     imageView.image = [UIImage imageWithContentsOfFile:url]; 
     isImageLoaded = YES; 
     [self addScrollView]; 
    } 
} 
- (void) setHotspotURL:(NSString *)URL { 
    [hotspot.view removeFromSuperview]; 
    [hotspot release]; 
    hotspot = nil; 
    hotspot = [[FBHotspot alloc] initWithNibName:@"FBHotspot" bundle:nil]; 
    hotspot.view.frame = CGRectMake(0, 0, 768, 1024); 
    hotspot.delegate = self; 
    [hotspot setURL:URL]; 
    [container addSubview:hotspot.view]; 
} 

**When I am calling setHotspotURL and it’s not updating to the scrollview.** 
+1

您需要發佈相關代碼,以便我們能夠看到您做錯了什麼。 – graver 2012-08-16 10:18:10

+0

在此處發佈代碼..所以我們可以幫助您..我們會想象?? – Gabrail 2012-08-16 10:39:58

回答

0

確保您將內容插入滾動視圖中的正確位置。相應地設置contentSize。嘗試撥打UIScrollView實例的layoutSubviews

+0

我也一樣。但它不受影響 – user1587610 2012-08-16 10:36:55

+0

那麼你需要在這種情況下發布一些代碼。 – anka 2012-08-16 11:22:59