缩放时保持 UIButton 相对
Posted
技术标签:
【中文标题】缩放时保持 UIButton 相对【英文标题】:Keeping UIButton relative when zooming 【发布时间】:2012-06-27 14:12:00 【问题描述】:我有一个 UIScrollview,里面有一个 UIImageview 显示平面图。我在滚动视图中还有一个 UIButton,用作标记/图钉。
我已经通过捏合/双击图像实现了缩放,但是当图像滚动和/或缩放时 UIButton 元素显然不会移动。
我尝试了以下代码来尝试在缩放完成后重新定位按钮:
[myButton setFrame:CGRectMake(
(myButton.frame.origin.x - myButton.frame.size.width / 2) * _scrollView.zoomScale,
(myButton.frame.origin.y - myButton.frame.size.height / 2) * _scrollView.zoomScale,
myButton.frame.size.width, myButton.frame.size.height)];
这会将按钮移动到左上角。
有没有人知道我应该做些什么来保持按钮相对于图像(就像标记在谷歌地图上所做的一样)。
【问题讨论】:
您希望按钮缩放(而不仅仅是移动)吗?您是否尝试将 Button 添加为 UIImageView 的子视图? (相应地设置自动调整子视图) 【参考方案1】:我最近回复了question very similar to this。如果您不需要实时更新(仅在缩放完成后更新),那么您应该可以使用此处列出的方法。
【讨论】:
不,我不需要按钮来缩放 - 它可以保持相同的大小,只需要是相对的(即,如果它指向平面图上的区域 B,它总是需要指向在那里,无论缩放级别如何)。那么如果我将按钮添加到 UIImageView,它会自动执行此操作吗? 这个想法是你不应该直接让你的 UIScrollView 拥有 UIButton。相反,让超级视图拥有按钮,然后计算您希望按钮移动到的点。 好吧,我刚刚将按钮添加到 imageView 而不是 scrollView,它会自动为我完成所有相对定位!太棒了! ...但是,当我将其添加到 imageView 而不是 scrollView 时,这将停止工作:[button addTarget:self action:@selector(aMethod:) forControlEvents:UIControlEventTouchDown]; 你为什么不在界面生成器中连接它?【参考方案2】:好的,通过以下方式解决了这个问题:
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundImage:[UIImage imageNamed:@"Marker.png"] forState:UIControlStateNormal];
button.frame = CGRectMake(640.0, 230.0, 30.0, 46.0);
[button addTarget:self action:@selector(aMethod:)forControlEvents:UIControlEventTouchUpInside];
[self.imageView addSubview: button];
self.imageView.userInteractionEnabled = YES;
基本上通过直接将按钮添加到 imageView 然后启用 userInteraction,我能够获得所需的所有功能。
【讨论】:
以上是关于缩放时保持 UIButton 相对的主要内容,如果未能解决你的问题,请参考以下文章
UIButton 中图像的缩放类型或 contentMode 不起作用