通过拖动UISlider滚动图像

时间:2012-09-24 03:06:41

标签: objective-c ios xcode uiscrollview uislider

我是IOS Dev的初学者。询问如何通过拖动UIScrollView来滚动UISlider图片。这是我的情况:

必要案例:

拖动滑块时,图像会在UIScrollView上滚动。此外,当滚动图像时,滑块会相应地更改其值。

实际案例:

滚动图像时,滑块在拖动滑块图像 DONOT 滚动时相应地更改其值 BUT

这是我的代码,我希望任何人告诉我如何在滑块拖动时滚动。

Slider 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]];
    }
}

to 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];
}

1 个答案:

答案 0 :(得分:2)

uislider不适合与uiscrollview一起使用....为此目的,有一个控件可用名称UIPagecontrol .. 以下链接是一个很好的例子,代码可以指导您如何在UIScollview中使用它

UIPagecontroll with UIscollview with code Click Here