- (void)drawRect:(CGRect)rect{
float sliceSize = rect.size.width / imagesShownAtOnce;
//Apply our clipping region and fill it with black
[clippingRegion addClip];
[clippingRegion fill];
//Draw the 3 images (+1 for inbetween), with our scroll amount.
CGPoint loc;
for (int i=0;i<imagesShownAtOnce+1;i++){
loc = CGPointMake(rect.origin.x+(i*sliceSize)-imageScroll, rect.origin.y);
[[buttonImages objectAtIndex:i] drawAtPoint:loc];
}
//Draw the text region background
[[UIColor blackColor] setFill];
[textRegion fillWithBlendMode:kCGBlendModeNormal alpha:0.4f];
//Draw the actual text.
CGRect textRectangle = CGRectMake(rect.origin.x+16,rect.origin.y+rect.size.height*4/5.6,rect.size.width/1.5,rect.size.height/3);
[[UIColor whiteColor] setFill];
[buttonText drawInRect:textRectangle withFont:[UIFont fontWithName:@"Avenir-HeavyOblique" size:22]];
}
clippingRegion
そして、私textRegion
がUIBezierPaths
望む丸みを帯びた長方形を私に与えることです(最初はクリッピング領域用、2番目はテキストのオーバーレイとして)
中央のセクションでは、3 つの画像を描画し、それらをスクロールさせます。これは、 から 2 回更新するたびに更新され、CADisplayLink
を呼び出して描画領域を無効にし、[self setNeedsDisplay]
さらに imageScroll 変数を増やします。
背景情報が完了したので、ここに私の問題があります:
それは実行され、さらにスムーズに実行されます。しかし、絶対に大量の CPU 時間を消費しています (80% 以上)!! 代わりにこれを電話の GPU にプッシュするにはどうすればよいですか? 誰かが CALayers について教えてくれましたが、私はそれらを扱ったことはありません。