缩放时保持 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 在屏幕上保持静止

UIButton 中图像的缩放类型或 contentMode 不起作用

iPhone - 内部带有未调整大小图像的 UIButton

UIButton - 触摸时保持文本黑色

根据设备大小在多行 UIButton 上缩放字体

如何在 iOS 中平滑放大和缩小 UIButton