2

カスタムセルを備えたUITableViewがあります。

この種のUIScrollViewをすべてのセルに実装したいと思います。

すべてのscrollViewに含めることができる画像の最大数は5です。これより少なくすることもできますが、それ以上にすることはできません。

ここに画像の説明を入力してください

私はグラフィックとすべてを持っています。UIPageControlを使用して実装し、現在の画像がpageControlでマークされ、フレームを緑色に変更できるようにします。

私は今このコードを使用しています- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(12,202,295,91)];
self.scrollView.showsHorizontalScrollIndicator = NO;


NSMutableArray *imageArray = [[NSMutableArray alloc]init];

for (int i=0; i<[[[self.campArray objectAtIndex:[indexPath row]]valueForKey:@"images"]count]; i++) {


    UIImageView * imageView =[[UIImageView alloc] initWithFrame:CGRectMake(i*130, 0, 108, 92)];

    [imageView setImage:[UIImage imageNamed:@"Frame-03.png"]];

    UIImageView *imgV = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 96, 81)];
    [imgV setImageWithURL:[NSURL URLWithString:[[[[self.campArray objectAtIndex:[indexPath row]]valueForKey:@"images"]objectAtIndex:i]valueForKey:@"thumbnailURL"]]];

    imgV.contentMode=UIViewContentModeScaleToFill;

    imgV.tag=i+1;

    [imageView  addSubview:imgV];

    [imageArray addObject:imageView];

    [imageView release];
    [imgV release];

}



NSInteger numberOfViews = imageArray.count
;
for (int i = 0; i < numberOfViews; i++) {

    [self.scrollView addSubview:[imageArray objectAtIndex:i]];
}

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(zoomImage)];
[self.scrollView addGestureRecognizer:singleTap];   


self.scrollView.tag = [indexPath row];

UIPageControl *pgCtr = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 0, 108, 81)];

pgCtr.numberOfPages=numberOfViews;
pgCtr.autoresizingMask=UIViewAutoresizingNone;
[cell.contentView addSubview:pgCtr];

//set the scroll view content size
self.scrollView.contentSize = CGSizeMake(130 * 
                                         numberOfViews, 
                                         self.scrollView.frame.size.height);
//add the scrollview to this view
[cell.contentView addSubview:self.scrollView];
return cell;

ありがとう!

4

1 に答える 1

0

必要に応じて、スクロールビューでオブジェクトをUIScrollView設定することでそれを行います。UIImageView

ユーザーが画像をスクロールして離すと、中心に最も近い画像が中央に配置され、ハイライトされた画像になります。私たちはそれを自分で処理する必要があります。したがってUIScrollViewDelegate、メソッドを作成して実装しますscrollViewWillBeginDecelerating:

次の問題は、スクロールを遅くして、最も近い画像を中心に停止する方法を見つけることです。これは少しトリッキーですが、かなり可能です。いくつか知っておく必要があります。スクロール ビューの表示領域は、実際には大きな画像上の移動ウィンドウにすぎません。このウィンドウが現在どこにあるかを知る必要があり、すべてのアイテムが全体像のどこにあるかを知る必要があります。

スクロール ビューの幅 (コンテンツではなく、スクロール ビュー自体) を 2 で割ります。中心がありますが、それをコンテンツの現在の位置と比較する必要があります。を使用して、スクロール ビューに配置したそれぞれのプロパティcontentOffsetUIScrollView比較します。と_frameUIImageVieworigin.xsize.width

CGFloat center = self.scrollView.frame.size.width/2 + self.scrollView.contentOffset.x;
for (UIImageView *view in scrollViewImages) {
    CGFloat leftEdge = view.frame.origin.x;
    CGFloat rightEdge = leftEdge + view.frame.size.width;

    // I didn't account the user stopping in a gap between images
    if (center >= leftEdge && center <= rightEdge) {
        [self.scrollView setContentOffset:leftEdge+view.frame.size.width/2 animated:YES];
        self.selectedImage = view;
        break;
    }
}

次に、画像を更新するだけで、UIPageControl必要なことは何でもできます。

于 2012-12-21T17:36:36.283 に答える