如何在两个单独的图层上绘制iOS,coregraphics
我需要帮助画这样的事情:
我被告知灰色的背景条和紫色条应该在不同的图层上绘制。 然后在那里表示一本书的章节(这个滑块是关于这个章节的)将在这两个层上。
我已经完成了在活动栏上创build渐变的任务,并像这样绘制它:
- (void)drawRect:(CGRect)rect{ self.opaque=NO; CGRect viewRect = self.bounds; //NSLog(@"innerRect width is: %f", innerRect.size.width); CGFloat perPageWidth = viewRect.size.width/[self.model.book.totalPages floatValue]; NSLog(@"perpage width is: %f", perPageWidth); CGContextRef context = UIGraphicsGetCurrentContext(); UIBezierPath *beizerPathForSegment= [UIBezierPath bezierPath]; NSArray *arrayFromReadingSessionsSet =[self.model.readingSessions allObjects]; NSArray *arrayFromAssesmentSet = [self.model.studentAssessments allObjects]; NSLog(@"array is : %@", self.model.readingSessions); CGGradientRef gradient = [self gradient]; for (int i=0;i<[arrayFromReadingSessionsSet count]; i++) { ReadingSession *tempRSObj= [arrayFromReadingSessionsSet objectAtIndex:i]; CGFloat pageDifference = [tempRSObj.endPage floatValue]-[tempRSObj.startPage floatValue]; NSLog(@"startpage is: %@, end page is: %@, total pages are: %@", tempRSObj.startPage, tempRSObj.endPage, self.model.book.totalPages) ; CGRect ProgressIndicator = CGRectMake(perPageWidth*[tempRSObj.startPage floatValue], viewRect.origin.y, perPageWidth*pageDifference, viewRect.size.height); [beizerPathForSegment appendPath:[UIBezierPath bezierPathWithRoundedRect:ProgressIndicator cornerRadius:13.0]]; } [beizerPathForSegment addClip]; CGContextDrawLinearGradient(context, gradient, CGPointMake(CGRectGetMidX([beizerPathForSegment bounds]), CGRectGetMaxY([beizerPathForSegment bounds])),CGPointMake(CGRectGetMidX([beizerPathForSegment bounds]), 0), (CGGradientDrawingOptions)NULL); }
我如何将它转移到一个图层上,然后创build另一个图层和另一个图层,然后将它们放在另一个图层上?
TIA
我猜你所说的那个人是指CALayer 。 在iOS中,每个视图都有一个CALayer支持它。 不要在你的视图中执行-drawRect:
,这样做:
- 链接与QuartzCore
-
#import <QuartzCore/QuartzCore.h>
任何你想使用这个。 - 使用您的视图的
layer
属性。
图层的行为与视图非常相似,因为您可以拥有子图层和超级图层,并且图层具有背景颜色等属性,并且可以进行animation制作。 一些可能对你有用的子类是CAGradientLayer
和CAShapeLayer
。 有关如何使用图层的更多信息,请参阅“ 核心animation编程指南” 。