0

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

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

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

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

S。

4

1 回答 1

0

我终于在 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];
    }
}
于 2014-06-18T09:22:47.570 回答