如何在两个单独的图层上绘制iOS,coregraphics

时间:2012-11-26 15:17:41

标签: ios cocoa-touch core-graphics quartz-graphics

我需要帮助来绘制这样的东西: enter image description here

我被告知灰色背景条和紫色条应该在不同的图层上绘制。然后那里的圆点表示书的章节(这个滑块是关于的)将在这两个上面的一层上。

我完成了在活动栏上创建渐变并完成绘制的任务:

- (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);
}

如何将其移动到图层上,然后创建另一个图层和另一个图层然后将它们放在一起?

TIA

1 个答案:

答案 0 :(得分:1)

我猜你与之交谈的人指的是CALayer。在iOS中,每个视图都有一个CALayer支持它。不要在视图中实现-drawRect:,而是执行此操作:

  1. link with QuartzCore
  2. #import <QuartzCore/QuartzCore.h>您想要使用它的任何地方。
  3. 使用您的视图的layer属性。
  4. 图层的行为与视图非常相似,因为您可以拥有子图层和叠加层,图层具有背景颜色等属性,并且可以设置动画。可能对您的用途有用的几个子类是CAGradientLayerCAShapeLayer。有关如何使用图层的更多信息,请参阅Core Animation Programming Guide