如何在两个单独的图层上绘制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: ,这样做:

  1. 链接与QuartzCore
  2. #import <QuartzCore/QuartzCore.h>任何你想使用这个。
  3. 使用您的视图的layer属性。

图层的行为与视图非常相似,因为您可以拥有子图层和超级图层,并且图层具有背景颜色等属性,并且可以进行animation制作。 一些可能对你有用的子类是CAGradientLayerCAShapeLayer 。 有关如何使用图层的更多信息,请参阅“ 核心animation编程指南” 。