サブクラス化された UIView で drawRect をオーバーライドして、tableView の単純なテクスチャ背景を作成することに興味があります。目標は達成しましたが、パフォーマンスはあまり良くありません。これは、私のような初心者に共通の問題であることを理解しています。ただし、これが CoreGraphics での最初の作業であるため、問題の原因を診断するのに苦労しています。
パフォーマンス ヒットとは、ナビゲーション コントローラーを介して tableViewController がアニメーション化される前に遅延があることを意味します。あなたが望むなら、それはハングします。[[self tableView] setBackgroundView:level1View]; の適切な設定で、UITableViewControllers のいずれかが最初に開始されたときに、パフォーマンスの低下が発生します。テーブル ビューの後続のレンダリングでは、パフォーマンス ヒットはありません。backgroundView プロパティをカスタム描画ビューに設定しないと、パフォーマンスの問題はなくなります。どんな考えでも大歓迎です。
いくつかの注意点: パフォーマンスが向上する唯一の方法でない限り、このために画像を並べて表示したくありません。(学習しようとしています。)また、ここにあるチュートリアルに基づいてコードを作成しました: http://www.raywenderlich.com/2167/core-graphics-101-patterns
#import "HordLevel1View.h"
static inline double radians (double degrees) { return degrees * M_PI/180; }
void MyDrawColoredPattern1 (void *info, CGContextRef context)
{
UIColor * dotColor = [UIColor colorWithHue:0 saturation:0 brightness:0.90 alpha:1.0];
UIColor * shadowColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.2];
CGContextSetFillColorWithColor(context, dotColor.CGColor);
CGContextSetShadowWithColor(context, CGSizeMake(0, 0), .25, shadowColor.CGColor);
//First line of circles
CGContextAddArc(context, 1, 1, 1, 0, radians(360), 0);
CGContextFillPath(context);
CGContextAddArc(context, 3, 2, 1, 0, radians(360), 0);
CGContextFillPath(context);
CGContextAddArc(context, 5, 0, 1, 0, radians(360), 0);
CGContextFillPath(context);
CGContextAddArc(context, 5, 3, 1, 0, radians(360), 0);
CGContextFillPath(context);
CGContextAddArc(context, 1, 4, 1, 0, radians(360), 0);
CGContextFillPath(context);
CGContextAddArc(context, 3, 5, 1, 0, radians(360), 0);
CGContextFillPath(context);
CGContextAddArc(context, 5, 6, 1, 0, radians(360), 0);
CGContextFillPath(context);
}
@implementation HordLevel1View
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
UIColor * bgColor = [UIColor colorWithHue:0 saturation:0 brightness:0.85 alpha:1.0];
CGContextSetFillColorWithColor(context, bgColor.CGColor);
CGContextFillRect(context, rect);
static const CGPatternCallbacks callbacks = { 0, &MyDrawColoredPattern1, NULL };
CGContextSaveGState(context);
CGColorSpaceRef patternSpace = CGColorSpaceCreatePattern(NULL);
CGContextSetFillColorSpace(context, patternSpace);
CGColorSpaceRelease(patternSpace);
CGPatternRef pattern = CGPatternCreate(NULL,
rect,
CGAffineTransformIdentity,
6,
6,
kCGPatternTilingConstantSpacing,
true,
&callbacks);
CGFloat alpha = 1.0;
CGContextSetFillPattern(context, pattern, &alpha);
CGPatternRelease(pattern);
CGContextFillRect(context, self.bounds);
CGContextRestoreGState(context);
}
@end