【问题标题】:Any method to get layer's parent view?有什么方法可以获取图层的父视图?
【发布时间】:2014-05-22 04:10:38
【问题描述】:

是的,你没看错“图层的父视图”。我不确定它是否正确使用,但我的意思是,我添加了一个图层作为视图的子图层。我想知道是否有任何方法可以从图层中获取视图。

【问题讨论】:

  • 您是如何失去视图和图层之间的关联的?你一定在做一些很奇怪的事情。
  • 我有一个 CALayer 的子类,它是一个可重用的模块。它可以添加到任何视图中。现在我有一种情况,一旦将视图添加为子图层,我想从视图中获取一些信息。我可以通过在 layer 子类中维护视图的属性来轻松解决这个问题,但我想知道是否有更好的方法。

标签: ios view calayer


【解决方案1】:

好的,所以如果您有一个常用的CALayer-子类并且您需要“调用视图”,那么在我看来,该视图需要符合协议为了使它正常工作。

在这种情况下,您需要使用 KVC 在层内存储对视图的引用:

[layer setValue:view forKey:MyViewKey];

其中MyViewKey 可以声明为CALayer-子类代码的一部分:

extern NSString * const MyViewKey;

并且将被定义为:

NSString * const MyViewKey = @"Hello Mum";

【讨论】:

  • 如果我遗漏了什么,请告诉我,但这与在图层子类中维护一个属性不一样吗?
  • @Adithya 完全一样,是的。
【解决方案2】:

您可以使用 KVC 执行此操作。

UIView *View1=[UIView new];
View1.tag=1;
[View1.layer setValue:View1 forKey:@"LayerObject"];

UIView *View2=[UIView new];
View2.tag=2;
[View2.layer setValue:View2 forKey:@"LayerObject"];

NSLog(@"Your Layers superView = %@",[View2.layer.superlayer valueForKey:@"LayerObject"]);

这将返回您图层的父视图。

【讨论】:

  • 感谢您的回答,但我想我宁愿为视图维护一个单独的属性。
  • 是的,当然..您可以维护属性或标签或类名。
【解决方案3】:

这个问题很老了,但是访问CALayer的父视图很简单:

layer.delegate

如果您查看调试器,您会看到 delegate 属性填充了包含该层的 UIView,如果没有,您可以递归检查,直到您获得主要的 CALayer 直接托管在视图。

来源:https://developer.apple.com/documentation/quartzcore/calayer/1410984-delegate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 2011-12-23
    • 2021-12-25
    • 2017-11-22
    • 2013-01-09
    • 1970-01-01
    • 2016-03-15
    相关资源
    最近更新 更多