2012-03-23 11 views
0

自分でUIScrollViewを作成しました。 - (void)drawRect:(CGRect)rectUICuttonを使用したUIScrollView:スクロール後にボタンが表示される

、私はそのように私のボタンを描画した:

- (void) createView { 
CGFloat currentY = 0; 
CGFloat currentX = 0; 
CGFloat currentH = 0; 

for (int i = 0; i < [images count]; i++) { 
    UIImage *img = [images objectAtIndex:i]; 

    CGSize cropParam = [[finalCrops objectAtIndex:i] CGSizeValue]; 
    CGSize imgSize = [[finalSizes objectAtIndex:i] CGSizeValue]; 

    UIImage *newImg = nil; 

    if (imgSize.width > 0) { 
     newImg = [img resize:imgSize]; 
    } 

    if (cropParam.width > 0) { 
     newImg = [newImg crop:CGRectMake(0, 0, cropParam.width, cropParam.height)]; 
    } 

    // Create a button for the image 
    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(currentX + margin, 
                    currentY + margin, 
                    newImg.size.width, 
                    newImg.size.height)]; 

    [button setImage:newImg forState:UIControlStateNormal]; 
    [self addSubview:button]; 

    currentX += 2 * margin + newImg.size.width; 

    if (currentX > viewWidth) { 
     currentX = 0; 
     currentY += 2 * margin + newImg.size.height; 
     currentH = newImg.size.height; 
    } 
} 
self.contentSize = CGSizeMake(viewWidth, currentY); 

}

問題はビューが表示されたら、それは黒であるということです。このボタンは、ビューをスクロールするときにのみ表示されます。

私には何が欠けていますか?あなたが再描画アクションをトリガしていないよう

答えて

0

サウンズ - documentationから:

ビューの変更の実際の内容は、あなたのビューを再描画する必要のあるシステムに通知するためにあなたの責任であるとき。これを行うには、ビューのsetNeedsDisplayまたはsetNeedsDisplayInRect:メソッドを呼び出します。これらのメソッドは、次の描画サイクル中にビューを更新する必要があることをシステムに知らせます。ビューを更新するために次の描画サイクルまで待機するので、これらのメソッドを複数のビューで呼び出して、同時に更新することができます。

+0

私はsetneedsdisplayをdrawrectの最後またはcreateViewに置いてみましたが、何も変更しませんでした。 –

関連する問題