我有以下层次结构: 视图 scrollview(启用滚动和缩放) containerview imageview(带地图) 按钮的视图 导航面板的视图
在图片视图中,我必须提出一些兴趣点(取决于用户选择的类别): 问题是: 如果我将它们附加到容器视图,他们获得正确的位置是非常容易的, 但是在缩放时,它们会随图像一起变焦,并且应该保持相同的尺寸(1) 如果我将它们附加到滚动视图我什么都没看到.. 如果我将它们附加到主视图,我有两个问题: 1在滚动视图和按钮等视图之间找到它们的层次结构位置(它们位于应用程序的顶部,应该只是在地图上但在控制面板,按钮等下方 2使用convertPoint:toView与缩放和滚动完成协调 如果我添加一个视图(滚动视图下的容器视图的兄弟),它们显示正常,但我没有用户输入(他们没有收到 触摸) 如果我将兄弟子视图转换为CALayer,我不会显示子图层(POI)。
(1)我试图通过应用CGAffineTransform使用容器视图并覆盖setTransform,reverseTransform = CGAffineTransformInvert(transform);但是我在向它传递一个带有视图引用的数组时遇到了问题
在这种情况下,您会建议做什么? 非常感谢你!
S上。
答案 0 :(得分: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];
}
}