Skip navigation.
 
mlRe: Problem with CALayer delegate
FROM : Vinay Prabhu
DATE : Sat Feb 23 07:33:10 2008

your code looks fine to me, ideally the delegates should get called.

In my code, I have called the API's,
self setLayer:mainLayer];
[self setWantsLayer:YES];

after the view is initialized, like,
Code in the Controller class:
CustomView* view = [[CustomView alloc] initWithFrame:rect];
[view setUpCALayers];

Code in the view class:
- (void) setUpCALayers
{
   self setLayer:mainLayer];
   [self setWantsLayer:YES];
}
- (void)updateLayers
{
   [mainLayer setNeedsDisplay];
}

and it is perfectly working fine.
I am not able to explain why delegates are not getting called in your 
code,
but you can try moving the setLayer and setWantsLayer outside the init.

-Vinay

On Feb 23, 2008, at 11:18 AM, Francois-Jean De Brienne wrote:

> thanks, but this did not help. I'm still not getting drawLayer: 
> inContext to be called.
>
>
>
> On 23-Feb-08, at 12:41 AM, Vinay Prabhu wrote:
>

>> Instead of creating CALayer object using,
>> mainLayer = [[[CALayer alloc] init] retain];
>>
>> try creating the CALayer this way,
>> mainLayer = [[CALayer layer] retain];
>>
>> -Vinay
>>
>> On Feb 23, 2008, at 10:50 AM, Matt Long wrote:
>>

>>> You could try creating your own CALayer derived class that overrides
>>>
>>> - (void)drawInContext:(CGContextRef)ctx
>>>
>>> drawLayer simply allows your delegate to override that same method 
>>> externally.
>>>
>>> -Matt
>>>
>>>
>>> On Feb 22, 2008, at 9:52 PM, Francois-Jean De Brienne wrote:
>>>

>>>> Hello everyone,
>>>>
>>>> I'm a very new cocoa developer (I switched two months ago) but an 
>>>> experienced (15+ years) developer.
>>>>
>>>> I'm struggling trying to get a CALayer delegate method, 
>>>> specifically drawLayer being called. I am trying to host the 
>>>> CALayer inside an NSView that would be the delegate for the 
>>>> CALayer.
>>>>
>>>> The CALayer is an attribute of my custom NSView called mainLayer.
>>>>
>>>> Here is the initWithFrame method for my custom NSView:
>>>>
>>>> -(id) initWithFrame: (NSRect) frameRect
>>>> {
>>>>     self = [super initWithFrame:frameRect];
>>>>     
>>>>     if (self)
>>>>     {
>>>>         mainLayer = [[[CALayer alloc] init] retain];
>>>>         
>>>>         [mainLayer setDelegate:self];
>>>>         [self setLayer:mainLayer];
>>>>         [self setWantsLayer:YES];
>>>>     }
>>>>     
>>>>     return self;
>>>> }
>>>>
>>>> Then, the custom NSView declares a drawLayer method as such (that 
>>>> I'd want to be called from my mainLayer):
>>>>
>>>> -(void)drawLayer:(CALayer*) layer inContext:(CGContextRef)ctx
>>>> {
>>>>     NSLog (@"Entered drawLayer");
>>>> }
>>>>
>>>> Now, whenever I send the setNeedsDisplay message to mainLayer, I 
>>>> assume that drawLayer would be called. It is not.
>>>>
>>>> drawLayer is also declared in the .h for the custom NSView (if 
>>>> that makes any difference).
>>>>
>>>> If I override and define drawRect for my NSView, I can verify 
>>>> that it does enter that method:
>>>>
>>>> - (void)drawRect:(NSRect)rect
>>>> {
>>>>     NSLog (@"Entered drawRect");
>>>> }
>>>>
>>>>
>>>> What am I doing wrong?
>>>> _______________________________________________
>>>>
>>>> Cocoa-dev mailing list (<email_removed>)
>>>>
>>>> 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:
>>>> http://lists.apple.com/mailman/options/cocoa-dev/matt.<email_removed>
>>>>
>>>> This email sent to matt.<email_removed>

>>>
>>> _______________________________________________
>>>
>>> Cocoa-dev mailing list (<email_removed>)
>>>
>>> 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:
>>> http://lists.apple.com/mailman/options/cocoa-dev/vinay.<email_removed>
>>>
>>> This email sent to vinay.<email_removed>
>>>

>>

>
>

Related mailsAuthorDate
mlProblem with CALayer delegate Francois-Jean De B… Feb 23, 05:52
mlRe: Problem with CALayer delegate Matt Long Feb 23, 06:20
mlRe: Problem with CALayer delegate Francois-Jean De B… Feb 23, 06:38
mlRe: Problem with CALayer delegate Vinay Prabhu Feb 23, 06:41
mlRe: Problem with CALayer delegate Francois-Jean De B… Feb 23, 06:48
mlRe: Problem with CALayer delegate Bob Van Osten Feb 23, 07:01
mlRe: Problem with CALayer delegate Francois-Jean De B… Feb 23, 07:21
mlRe: Problem with CALayer delegate Vinay Prabhu Feb 23, 07:33
mlRe: Problem with CALayer delegate Kyle Sluder Feb 23, 07:38
mlRe: Problem with CALayer delegate Francois-Jean De B… Feb 23, 08:02
mlRe: Problem with CALayer delegate Kyle Sluder Feb 23, 08:17