Почему мой CGContext обрезается до предела? - PullRequest
3 голосов
/ 08 августа 2010

Должен ли я иметь возможность переопределить drawInContext () и рисовать за пределами моего CALayer? Даже если для моего слоя maskToBounds установлено значение NO (по умолчанию), вызывается drawInContext () с клипом, установленным в границах моего слоя, и я не могу нарисовать за его пределами.

Мой тестовый слой делает что-то вроде этого:

-(void)drawInContext:(CGContextRef)context 
{   
    [super drawInContext:context];      
    NSLog(@"mask to bounds=%d", self.masksToBounds); // NO  
    CGRect clip = CGContextGetClipBoundingBox(context);
    NSLog(@"clip=%f,%f,%f,%f", clip.origin.x, clip.origin.y, clip.size.width, clip.size.height); // reports the bounds

    CGContextSetStrokeColorWithColor(context, [[UIColor whiteColor] CGColor]);  
    CGContextBeginPath(context);
    CGContextSetLineWidth(context, 5.0);
    CGContextMoveToPoint(context, 0, 0);
    CGContextAddLineToPoint(context, 500, 0.0); // wider than my layer...
    CGContextStrokePath(context);
}

и вот как я это настроил:

- (void)viewDidLoad 
{
    [super viewDidLoad];
    CALayer *layer = [[MyLayer alloc] init];
    layer.needsDisplayOnBoundsChange=YES;
    layer.frame = CGRectMake(50, 50, 200, 200);
    [self.view.layer addSublayer:layer];
}

Это просто ограничение основных анимационных слоев? (Нужно ли рисовать в слое над этим слоем?)

спасибо.

1 Ответ

4 голосов
/ 08 августа 2010

Нет возможности для содержимого слоя выходить за его границы;однако вы можете добавить подслой, который переполняется, указав рамку, которая выходит за границы, и установив для свойства masksToBounds значение NO (по умолчанию).

...