Search code examples
objective-ciosipadcalayer

CALayer redraw on rotation


I've got this in my CALayer drawing code

- (void) drawInContext:(CGContextRef)ctx {
self.frame = self.superlayer.bounds;

CGFloat height = self.bounds.size.height;
CGFloat width = self.bounds.size.width;

CGContextSetFillColorWithColor(ctx, [UIColor grayColor].CGColor);

//Draw a stripe every other pixel
int count = 0; 
while (count < height) {   
    CGContextFillRect(ctx, CGRectMake(0, count, width, 1));
    count=count+2;
}

}

Basically, its drawing pin stripes on top a view. I want it to fill the view.

The view is fixed at 40 high and the width of the iPad.

When i rotate, I tell the CALayer to redraw (which is another problem - i'd rather it just automatically scale to the new width).

Even with log outputs of the width and height above, it is correct. But when it draws in landscape - there is a ~100 pixel gap on the right...

Any ideas, or better way of doing this?


Solution

  • What a waste of my time.... I gave up and did it a different way.

    Also.....Core Animation Programming Guide lied to me and told me CALayer had an autoResizingMask - which would probably solve this for me. It doesn't have this property, not on the iOS version of it anyway.... MacOS version probably has it.

    I scrapped doing it in a CALayer and did the same thing in drawRect on a UIView and set the autoResizingMask of my UIView.

    This solves it. Although somehow I feel like I should be doing it in a CALayer...?