0

我需要帮助绘制这样的东西: 在此处输入图像描述

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

我已经完成了在活动栏上创建渐变并绘制它的任务,如下所示:

- (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

4

1 回答 1

1

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

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

图层的行为很像视图,因为您可以拥有子图层和超级图层,并且图层具有背景颜色等属性,并且可以设置动画。可能对您的目的有用的几个子类是CAGradientLayerCAShapeLayer。有关如何使用图层的更多信息,请参阅核心动画编程指南

于 2012-11-26T15:41:30.547 回答