0

I need help with drawing something like this: enter image description here

I have been told that the gray background bar and the purple bar should be drawn on separate layers. And then the dots there that signifies the chapters of a book (which this slider is about) will be on a layer on top of those two.

I have accomplished the task of creating the gradient on the active bar and drawing it like so:

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

How do I shift it onto a layer and then create another layer and another layer and then put them over one another?

TIA

4

1 に答える 1

1

あなたが話した人はCALayerについて言及していたと思います。iOS では、すべてのビューにそれを支える CALayer があります。ビューに実装する代わりに、次のよう-drawRect:にします。

  1. QuartzCore とのリンク
  2. #import <QuartzCore/QuartzCore.h>これを使いたいところならどこでも。
  3. ビューのlayerプロパティに使用します。

レイヤーは、サブレイヤーとスーパーレイヤーを持つことができ、レイヤーには背景色などのプロパティがあり、アニメーション化できるという点で、ビューとよく似た動作をします。目的に役立つと思われるサブクラスのいくつかは、CAGradientLayerCAShapeLayerです。レイヤーの使用方法の詳細については、Core Animation Programming Guideを参照してください。

于 2012-11-26T15:41:30.547 に答える