【问题标题】:Synchronized hierarchy of UIViews and CALayersUIViews 和 CALayers 的同步层次结构
【发布时间】:2014-06-16 11:03:38
【问题描述】:

我有以下层次结构: 看法 滚动视图(启用滚动和缩放) 容器视图 imageview(带地图) 按钮视图 导航面板的视图

在图像视图上,我必须放置一些兴趣点(取决于用户选择的类别): 问题是: 如果我将它们附加到容器视图,它们获得正确的位置非常容易, 但是在缩放时,它们会随图像一起缩放,并且它们应该保持相同的大小(1) 如果我将它们附加到滚动视图,我什么也看不到.. 如果我将它们附加到主视图,我有两个问题: 1 在滚动视图和按钮视图之间找到它们的层次结构位置等(它们位于应用程序的顶部,应该在地图上方但在控制面板、按钮等下方 2 与缩放和滚动协调 - 使用 convertPoint:toView 如果我添加一个视图(滚动视图下的容器视图的兄弟),它们显示得很好,但我没有用户输入它们(他们没有收到 触摸) 如果我将该同级子视图转换为 CALayer,则不会显示子层 (POI)。

(1) 我尝试通过应用 CGAffineTransform reverseTransform = CGAffineTransformInvert(transform) 来继承容器视图并覆盖 setTransform;但我在传递一个包含对它的视图引用的数组时遇到问题

在这种情况下,您会建议做什么? 非常感谢!

S.

【问题讨论】:

  • 如果您已经解决了自己的问题,最好写下自己问题的答案并接受它,而不是编辑问题。
  • 您好 jrturton,非常感谢您的评论。我是新来的。有美好的一天..

标签: ios uiview calayer uiview-hierarchy


【解决方案1】:

我终于在 containerView 中添加了子视图,并将其子类化:

- (void)setTransform:(CGAffineTransform)transform
{
    [super setTransform:transform];

    CGAffineTransform invertedTransform = CGAffineTransformInvert(transform);
    for (UIView *view in self.subviews)
    {
        if ([view isKindOfClass:[MarkerClass class]]) {
            [view setTransform:invertedTransform];
        }
    }
}

唯一的问题是,在我缩放 containerView 之前,屏幕上会出现一个短版的标记。

经过一段时间后,我发现我也会覆盖 addSubview,以这种方式获得初始转换:

-(void)addSubview:(UIView *)view {
    [super addSubview:view];
    if ([view isKindOfClass:[MarkerClass class]]) {
     CGAffineTransform invertedTransform = CGAffineTransformInvert(self.transform);
        [view setTransform:invertedTransform];
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 2011-11-04
    相关资源
    最近更新 更多