In my simple test project, an NSBezierPath is created and stroked.

-(id)initWithCoder:(NSCoder*)coder{
_path = [[NSBezierPath alloc] init];
        create points
}

- (void)drawRect:(NSRect)dirtyRect {
        bounds = [self bounds];
    NSLog(@"\n\n               bounds: %@\n\n", NSStringFromRect(bounds));

    [[NSColor whiteColor] set];
    [_path   setLineWidth:07.0];    //default width = 1
    [_path stroke];

bounds = [self bounds];
NSLog(@"\n\n      emd         bounds: %@\n\n", NSStringFromRect(bounds));
}

A breakpoint at the end of drawRect shows that it runs twice. After the second 
pass, the view appears, as it should.

Between passes, bounds is changed somehow, as shown by NSLog  at the start and 
end of drawRect. 
Since this will upset code that I will add later, I’d like to stop this. 

_path is not changed in either pass.

needsToDrawRect: is not used.

I’m using Xcode 6.1.1 in OSX 10.9.5.



I have not been able to find  a reason for this behavior. . I don’t know how to 
reveal the point between passes where bounds is actually changed. It does not 
happen in any other NSView projects of mine; drawRect runs only once in them

I would like to prevent the second pass, or at least prevent the bounds change 
between passes. I’m reluctant to try restoring bounds to its first value. I 
appreciate Ken Thomases’ warning in a previous subject not to change bounds in 
drawRect.

Can anyone explain why this happens? Is it possible to suppress it without 
destroying whatever good it does?

Thanks,

Nick




_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to