iosanimationuiviewsubclasscatransformlayer

Using CATransformLayer warning: changing property opaque in transform-only layer, will have no effect


I created a "TransformView" subclassing UIView in order to support a double-sided view which I am using in a flip animation. This has been suggested in other posts, eg:

How to rotate a flat object around its center in perspective view?

@interface TransformView : UIView
@end

@implementation TransformView
+ (Class)layerClass {
  return [CATransformLayer class];
}
@end

It all works fine, but I get a warning every time I create a TransformView object using:

TransformView *newTransformView=[[TransformView alloc] initWithFrame:frame];

The warning says:

- changing property opaque in transform-only layer, will have no effect

I guess the UIView class is initialising the opaque property which is usually fine for a CALayer but not a CATransformLayer.

Is the subclassing code quite dodgy? If so, how else can you create a 2-sided view for flip animations?

Any ideas for how to stop the warning?

I have a suspicion that creating a TransformView from a nib file rather than initWithFrame avoids the warning, but is seem cludgy to have to do this just to avoid the warning.


Solution

  • Your can avoid the warning by adding this extension somewhere in your code:

    @implementation CATransformLayer (MyExtension)
    -(void)setOpaque:(BOOL)opaque
    {
        return;
    }
    @end
    

    Of course this will also stop the warning for your own mistaken attempts to set the opaque property of a CATransformLayer.