Re: How to draw over a control in an NSView
Re: How to draw over a control in an NSView
- Subject: Re: How to draw over a control in an NSView
- From: Alexander Reichstadt <email@hidden>
- Date: Mon, 31 Oct 2011 00:07:42 +0100
Thanks much. I ended up subclassing an NSView to draw the required things, subclassed another view to be the containing superview and hold controls, and override in the containing view the addSubview method to always have it call super and also add the drawing view-subclass at the end. That way the view is always added on top of all others. In the given scenario the containing superview dynamically loads subviews anyway, so overriding addSubview seems to be the easiest path.
Alex
Am 30.10.2011 um 22:06 schrieb Jens Alfke:
>
> On Oct 30, 2011, at 12:46 PM, Alexander Reichstadt wrote:
>
>> given a custom NSView using drawRect to draw, say, a blue rectangle, controls inside that view are always in front of the blue rectangle. Is there a way to draw above controls with drawRect? Also putting a view with controls inside another view that draw in drawRect doesn't change that. Like textfields, they are always above drawn content. How does one draw above controls?
>
> Subviews are always drawn after their superview, so they are visually in front of it. You can’t change that.
> What you can try is adding a subview, positioning it over the control, and putting it in front (I think that means later in the subviews array.) Historically AppKit hasn’t handled overlapping sibling views, but I think that nowadays if you make the parent view layer-backed it will work. (But layer-backing views brings its own visual issues, so this may not work out for you.)
>
> Another approach is to subclass the control (or its cell class) and customize its drawing.
>
> —Jens
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden