私のiPadアプリには、新しいセルが選択されるたびにUIViewサブクラスを割り当て/初期化するUITableViewがあります。この UIView で放射状グラデーションを描画するようにオーバーライドdrawRect:
しましたが、正常に動作しますが、パフォーマンスが低下します。セルをタップすると、背景に .png を使用する場合とは対照的に、UIView がプログラムでグラデーションを描画するのにかなりの時間がかかります。メソッドまたはそれが生成する勾配を「キャッシュ」してdrawRect:
パフォーマンスを向上させる方法はありますか? drawRect:
.png の代わりに使用したいと思います。私の方法は次のようになります。
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
size_t gradLocationsNum = 2;
CGFloat gradLocations[2] = {0.0f, 1.0f};
CGFloat gradColors[8] = {0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.0f,0.5f};
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, gradColors, gradLocations, gradLocationsNum);
CGColorSpaceRelease(colorSpace);
CGPoint gradCenter = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds));
float gradRadius = MIN(self.bounds.size.width , self.bounds.size.height) ;
CGContextDrawRadialGradient (context, gradient, gradCenter, 0, gradCenter, gradRadius, kCGGradientDrawsAfterEndLocation);
CGGradientRelease(gradient);
}
ありがとう!