0

スクロールビューで質問があります。

今、スクロールビューの画像ギャラリーのサンプルを書いています。スクロールビューにたくさんの画像を追加しました。毎回、3枚の画像を表示するのですが、問題はスクロールをどう計測するかです。例: 各スクロールの最小値は 1 つの画像を移動します。今のところ、スクロールするたびに移動する最小画像は3つだと思います。これでは、見たい画像で止まることができません。以下はコードです。

- (void)layoutScrollImages
{
    UIImageView *view = nil;
    NSArray *subviews = [scroll subviews];

    // reposition all image subviews in a horizontal serial fashion
    CGFloat curXLoc = 0;
    for (view in subviews)
    {
        if ([view isKindOfClass:[UIImageView class]] && view.tag > 0)
        {
            CGRect frame = view.frame;
            frame.origin = CGPointMake(curXLoc, 0);
            view.frame = frame;

            curXLoc += (kScrollObjWidth);
        }
    }

    // set the content size so it can be scrollable
    [scroll setContentSize:CGSizeMake((kNumImages * kScrollObjWidth), [scroll bounds].size.height)];
}

#pragma mark - View lifecycle
- (void)viewDidLoad
{
    [super viewDidLoad];
    // 1. setup the scrollview for multiple images and add it to the view controller
    //
    // note: the following can be done in Interface Builder, but we show this in code for clarity
    [scroll setBackgroundColor:[UIColor blackColor]];
    [scroll setCanCancelContentTouches:NO];
    scroll.indicatorStyle = UIScrollViewIndicatorStyleWhite;
    scroll.clipsToBounds = YES;     // default is NO, we want to restrict drawing within our scrollview
    scroll.scrollEnabled = YES;

    // pagingEnabled property default is NO, if set the scroller will stop or snap at each photo
    // if you want free-flowing scroll, don't set this property.
    scroll.pagingEnabled = YES;

    // load all the images from our bundle and add them to the scroll view
    NSUInteger i;
    for (i = 1; i <= kNumImages; i++)
    {
        NSString *imageName = [NSString stringWithFormat:@"image%d.jpg", i];
        UIImage *image = [UIImage imageNamed:imageName];
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

        // setup each frame to a default height and width, it will be properly placed when we call "updateScrollList"
        CGRect rect = imageView.frame;
        rect.size.height = kScrollObjHeight;
        rect.size.width = kScrollObjWidth;
        imageView.frame = rect;
        imageView.tag = i;  // tag our images for later use when we place them in serial fashion
        [scroll addSubview:imageView];
        [imageView release];
    }

    [self layoutScrollImages];
}
4

2 に答える 2

1

このコードを使用してください......

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
 {
if(scroll.contentOffset.y> 320)
{

    int y  = scrollView.contentOffset.y;
    y = y/3;
    [scrollView setContentOffset:CGPointMake(0, y)];
}
}

うまくいけば、これはあなたを助けます...落ち着いて

于 2012-04-20T08:42:22.150 に答える
0

コンテンツ ビューをサブクラス化し、この関数を上書きします。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if ([self pointInside:point withEvent:event]) {
    if ([[self subviews] count] > 0) {
        //force return of first child, if exists
        return [[self subviews] objectAtIndex:0];
    } else {
        return self;
    }
}
return nil; }

https://github.com/taufikobet/ScrollViewCustomPagingで詳細を参照してください。

于 2013-03-29T04:10:35.080 に答える