Re: NSView vs CALayer
parfeon <[email protected]>
| Newsgroups | gmane.comp.macosx.devel |
|---|---|
| Message-ID | <[email protected]> |
Christiaan Hofman-2 wrote: > > > On Sep 29, 2009, at 19:25, parfeon wrote: > >> >> >> >> Christiaan Hofman-2 wrote: >>> >>> >>> On Sep 29, 2009, at 18:46, parfeon wrote: >>> >>>> >>>> >>>> >>>> Christiaan Hofman-2 wrote: >>>>> >>>>> >>>>> On Sep 29, 2009, at 18:03, parfeon wrote: >>>>> >>>>>> >>>>>> >>>>>> Christiaan Hofman-2 wrote: >>>>>>> >>>>>>> >>>>>>> On Sep 29, 2009, at 12:32, parfeon wrote: >>>>>>> >>>>>>>> >>>>>>>> Hello everyone. >>>>>>>> >>>>>>>> Working on project which draws some parts of its UI with >>>>>>>> CoreAnimation >>>>>>>> CALayers. Currently i need create some cover view, which will >>>>>>>> appear >>>>>>>> over >>>>>>>> whole UI (that NSView always there, coz it will response on user >>>>>>>> drag n >>>>>>>> drop). >>>>>>>> I'm stumbled with such problem as shown on screen >>>>>>>> >>>>>>>> http://www.nabble.com/file/p25659257/nsviewvscalayer.png >>>>>>>> >>>>>>>> http://img44.imageshack.us/i/nsviewvscalayer.png/ >>>>>>>> >>>>>>>> Transparent view overlays the view in which I used CALayers for >>>>>>>> drawing. >>>>>>>> Dunno why, but when I change that subview (with CALayers) to any >>>>>>>> other (w/o >>>>>>>> CoreAnimation drawing... some standard IB elements) everything >>>>>>>> looks >>>>>>>> great. >>>>>>>> >>>>>>>> >>>>>>>> Can someone help me with this? >>>>>>>> >>>>>>>> Thanks >>>>>>> >>>>>>> I really can't understand your message and in particular what >>>>>>> your >>>>>>> specific problem is. But the basic fact is that layer-hosting >>>>>>> views >>>>>>> cannot have subviews, so I guess that's where you run into. >>>>>>> >>>>>>> Christiaan >>>>>>> >>>>>>> _______________________________________________ >>>>>>> MacOSX-dev mailing list >>>>>>> [email protected] >>>>>>> http://www.omnigroup.com/mailman/listinfo/macosx-dev >>>>>>> >>>>>>> >>>>>> Quoted from: >>>>>> http://www.nabble.com/NSView-vs-CALayer-tp25659257p25663495.html >>>>>> >>>>>> >>>>>> My bad. Will try to explain all what I have done. Currently I want >>>>>> try to >>>>>> make behavior of window like in Transmission when You drag >>>>>> over .torrent >>>>>> file (appears blacj cover with info on center) >>>>>> >>>>>> 1. I have XIB with such structure as shown on image: >>>>>> http://img21.imageshack.us/img21/2967/mainxibstructure.png . I've >>>>>> placed >>>>>> there split view (2 views inside). Left view used for displaying >>>>>> source list >>>>>> (as we can see here >>>>>> http://www.nabble.com/file/p25659257/nsviewvscalayer.png) and the >>>>>> right view >>>>>> i used for displaying information (Place Holder). And also there >>>>>> over that >>>>>> split view "Drag&Drop Layer" (custom NSView where with CA I'm >>>>>> drawing >>>>>> transparent background); >>>>>> 2. After application do launch, my code placing inside "Place >>>>>> Holder" (with >>>>>> addSubview:) new custom view (instance of NSView placed in other >>>>>> XIB >>>>>> file); >>>>>> 3. On awakeFromNib that custom view creates CALayers and draws >>>>>> there >>>>>> content >>>>>> (background and buttons). On 'self' of custom view I'm setting >>>>>> setLayer to >>>>>> "baseLayer" (which holds all graphics) and then call >>>>>> setWantsLayer:YES; >>>>>> 4. And at the end we can see picture as I shown: >>>>>> http://www.nabble.com/file/p25659257/nsviewvscalayer.png It look's >>>>>> like >>>>>> "Drag&Drop Layer" cut out piece of custom view inside "Place >>>>>> Holder". >>>>>> >>>>>> Here is the code which I use to insert custom view inside "Place >>>>>> Holder": >>>>>> >>>>>> - (void)changeViewTo:(id)view{ >>>>>> if(currentView != [view view]) >>>>>> currentView = nil; >>>>>> >>>>>> if([[placeHolderView subviews] count] == 0){ >>>>>> [placeHolderView addSubview:[view view]]; >>>>>> else >>>>>> [placeHolderView replaceSubview:[[placeHolderView subviews] >>>>>> objectAtIndex:0] with:[view view]]; >>>>>> >>>>>> currentView = [view view]; >>>>>> >>>>>> [currentView setFrame:[[currentView superview] frame]]; >>>>>> >>>>>> [currentView setFrameOrigin:NSMakePoint(0,0)]; >>>>>> [currentView setAutoresizingMask:NSViewWidthSizable | >>>>>> NSViewHeightSizable]; >>>>>> } >>>>>> >>>>>> currentView - is type of NSView >>>>>> placeHolderView - is IBOutlet on "Place Holder" view of NSView >>>>>> class >>>>>> >>>>>> But when I'm adding inside placeHolder other custom view (which is >>>>>> inside >>>>>> loaded XIB) we can see this picture >>>>>> http://img182.imageshack.us/img182/1951/nsviewvsnsview.png In that >>>>>> view >>>>>> placed standard elements, which not drawn in real time. >>>>>> >>>>>> Sp till now I can't understand what I'm doing wrong. Can someone >>>>>> help with >>>>>> this? >>>>> >>>>> You still did not say what your problem is. What do you get? What >>>>> do >>>>> you expect? What do you want to get? What do you think is wrong? >>>>> There's a lot of things going on, and I don't know which part is >>>>> relevant. And your Engrish also does not help. >>>>> >>>>> Perhaps you should try to reduce your problem to a much simpler >>>>> model. >>>>> >>>>> Is the transparent overlay that partially covers the window the >>>>> CADragnDropView? In that case your setup makes no sense, because >>>>> the >>>>> splitview and dragndropview are overlapping sibling views, which >>>>> is >>>>> not supported and generally results in a mess. >>>>> >>>>> Christiaan >>>>> >>>>> _______________________________________________ >>>>> MacOSX-dev mailing list >>>>> [email protected] >>>>> http://www.omnigroup.com/mailman/listinfo/macosx-dev >>>>> >>>>> >>>> >>>> >>>> Yes, problem lies in that, what I can't make DragNDrop to be >>>> transparent for >>>> view with content (I show that on screenshot). Ok, I got it, but why >>>> DragNDrop view is transparent when showing different views (with >>>> content >>>> which not drown with CA). I'm just little bit confused about this, >>>> at one >>>> hand it's work with other views, at another it doesn't want work >>>> correct >>>> with another custom view. Thats why i thought what there something >>>> wrong in >>>> methods which I use to draw or place this view. >>> >>> You should not be confused: it's wrong, the result is undefined, so >>> it >>> just does not work. It is irrelevant in which way it goes wrong. >>> >>> Christiaan >> >> I see. Thats not good. I need somehow to reproduce such effect like >> in drag >> .torrent file over Transmission (appears transparent background >> which cover >> whole interface). Is there any well known practice for creating such >> overlay? I was trying to find something like that, but no w/o no luck. >> > > The standard practice is to overlay a transparent borderless child > window. > >> Ah, there is another reason of creating this cover layer. As I can >> found in >> documentations, registration for dragNdrop files from outside of >> application to inside available only for NSView. >> >> Application delegate class can handle dragNdrop on dock icon, as for >> application window itself... I found useful methods inside NSView >> class. >> > > > Views and windows can implement the NSDraggingDestination protocol. > > Christiaan > > _______________________________________________ > MacOSX-dev mailing list > [email protected] > http://www.omnigroup.com/mailman/listinfo/macosx-dev > > Wow, Christiaan thanks a lot for help! -- View this message in context: http://www.nabble.com/NSView-vs-CALayer-tp25659257p25667728.html Sent from the OmniGroup - MacOSX-Dev mailing list archive at Nabble.com.