0

UIScrollViewステージ内およびページング機能を有効にして、前後に移動できるようにしました。

に 10 個のサブビューを追加しましたUIScrollView。サブビュー内のコンテンツを変更すると、 に反映されません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.** 
4

1 に答える 1

0

スクロール ビュー内の正しい位置にコンテンツを挿入したことを確認してください。それに応じて設定しcontentSizeます。インスタンスの呼び出しlayoutSubviewsを試みるUIScrollView

于 2012-08-16T10:20:49.783 に答える