0

UIViewContentMode は、頻繁に必要ないくつかの位置 (Center、ScaleToFill、ScaleToFit) と、ほとんどの人がめったに使用しないと思われる負荷 (TopRight、誰か?) をカバーします。

しかし、明らかな「繰り返し」が欠けているようです。

UIView のコンテンツを効率的に繰り返す方法はありますか? つまり、サイズを変更すると、タイル表示されたコンテンツがより多く表示/カバーされるタイル表示ですか?

(明らかに、私はUIImageViewsについて話しているのではありません-UIImage/UIColorにはビットマップデータを処理する方法がありますが、それは別の問題です。「drawRect」を意味するUIViewについて話している...)

4

1 に答える 1

0

これが私の基本的な実装です。これはおそらくひどく低いパフォーマンスです (おそらく: 出力をキャッシュする代わりに、強制的にビューを再描画しますか?)

TilingView.h

@interface TilingView : UIView

@property( nonatomic, retain ) UIView* templateView;

@end

TilingView.m

@implementation TilingView

@synthesize templateView;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)drawRect:(CGRect)rect
{
    int cols = 1 + self.bounds.size.width / self.templateView.bounds.size.width;
    int rows = 1 + self.bounds.size.height / self.templateView.bounds.size.height;

    CGContextRef context = UIGraphicsGetCurrentContext();
    for( int k=0; k<rows; k++ )
        for( int i=0; i<cols; i++ )
        {
            CGContextSaveGState(context);

            CGContextTranslateCTM(context, i * self.templateView.bounds.size.width, k * self.templateView.bounds.size.height);

            [self.templateView drawRect:rect];

            CGContextRestoreGState(context);
        }
}

@end
于 2012-09-11T00:44:30.057 に答える