【问题标题】:How to remove a CALayer's mask?如何移除 CALayer 的遮罩?
【发布时间】:2013-08-09 12:49:13
【问题描述】:

大家好,这是我关于 SO 的第一个问题,这让我困惑了好几个小时。这是我的代码。

.m

- (IBAction)changeMask:(id)sender {
if (!mask) {

    [wallpaperImageView.layer setMask:captionTextField.layer];

    NSLog(@"%@",captionTextField.layer);
    mask = YES;
}
else {

    wallpaperImageView.layer.mask = nil;
    NSLog(@"%@",captionTextField);
    mask = NO;
}


}

每次调用 wallpaperImageView.layer.mask = nil; 时,captionTextField.layer 都会被释放。我在我的项目中使用 ARC。我用@property (nonatomic, strong) 分配了标题TextField 我使用了NSZombies 并得到了*** -[CALayer retain]: message sent to deallocated instance 0x85b5e20

如何让 CALayer 不被释放?

【问题讨论】:

  • 好吧,我读到了指针,并意识到 wallpaperImageView.layer.mask 指向 0x85b5e20,当我把它设为 nil 时,captionTextField.layer 也是 nil ......我上面的代码有什么解决方法吗?

标签: iphone cocoa-touch core-animation calayer


【解决方案1】:

您没有提供足够的信息。谁拥有您的标题文本字段?

发布代码,说明如何创建标题文本字段以及存储它的位置。您需要在某处保存对它的强引用(强实例变量或属性),否则它确实会在没有人持有它时立即被释放。

将您的 wallpaperImageView 的图层蒙版设置为 nil 会导致您的 captionTextField 被释放是没有意义的,除非您创建您的 captionTextField 并且不保持对它的强引用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 2015-03-23
    相关资源
    最近更新 更多