2

IOS開発のIam初心者。UIScrollViewをドラッグして画像をスクロールさせる方法について質問しUISliderます。これは私の場合です:

必要な場合:

スライダーをドラッグすると、画像が上にスクロールしUIScrollViewます。また、画像をスクロールするとき、スライダーはそれに応じてその値を変更します。

実際のケース:

画像をスクロールするとき、スライダーはそれに応じてその値を変更しますが、スライダー画像をドラッグするときスクロールしないでください。

これが私のコードです。スライダーをドラッグしたときにスクロールする方法を教えてください。

スライダーIBAction

- (IBAction)sliding:(UISlider *)sender{
    int slider_value = (int)slider.value;
    NSString *current_page = [[NSString alloc] initWithFormat:@"%i",slider_value];
    current_page_lbl.text = current_page ;
    [self loadPage:slider_value];
    [self loadVisiblePages];
}

UIScrollviewのメソッド:

- (void)loadPage:(NSInteger)page {
        if (page < 0 || page >= self.pageImages.count) {
            return;
        }

        UIView *pageView = [self.pageViews objectAtIndex:page];
        if ((NSNull*)pageView == [NSNull null]) {

            CGRect frame = self.scrollView.bounds;
            frame.origin.x = frame.size.width * page;
            frame.origin.y = 0.0f;

            UIImageView *newPageView = [[UIImageView alloc] initWithImage:[self.pageImages objectAtIndex:page]];
            newPageView.contentMode = UIViewContentModeScaleAspectFit;
            newPageView.frame = frame;
            [self.scrollView addSubview:newPageView];

            [self.pageViews replaceObjectAtIndex:page withObject:newPageView];
        }
    }

- (void)purgePage:(NSInteger)page {
    if (page < 0 || page >= self.pageImages.count) {
        // If it's outside the range of what you have to display, then do nothing
        return;
    }


    UIView *pageView = [self.pageViews objectAtIndex:page];
    if ((NSNull*)pageView != [NSNull null]) {
        [pageView removeFromSuperview];
        [self.pageViews replaceObjectAtIndex:page withObject:[NSNull null]];
    }
}

loadVisiblePageに

- (void)loadVisiblePages {

    CGFloat pageWidth = self.scrollView.frame.size.width;
    NSInteger page = (NSInteger)floor((self.scrollView.contentOffset.x * 2.0f + pageWidth) / (pageWidth * 2.0f));
    NSLog(@"page loaded is %d",page);

    self.pageControl.currentPage = page; 

    NSInteger firstPage = page - 1;
    NSInteger lastPage = page + 1;

    for (NSInteger i=0; i<firstPage; i++) {
         [self purgePage:i];
    }

    for (NSInteger i=firstPage; i<=lastPage; i++) {
         [self loadPage:i];
         slider.value = 21-i ;
         int slider_value = (int)slider.value;
         NSString *current_page = [[NSString alloc] initWithFormat:@"%i",21-slider_value];
         current_page_lbl.text = current_page ;
    }

    for (NSInteger i=lastPage+1; i<self.pageImages.count; i++) {
         [self purgePage:i];
    }
}


- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    [self loadVisiblePages];
}
4

1 に答える 1

2

uisliderはuiscrollviewでの使用には適していません....この目的のために、UIPagecontrolという名前の制御可能な名前が1つあります。次のリンクは、UIScollviewでの使用方法を示すコードの良い例です。

UIPagecontrollとUIscollviewとコードここをクリック

于 2012-09-24T07:52:10.793 に答える