我已经看了十几个关于这个话题的SO问题,没有一个答案对我有效.也许这能帮我重回正轨.

想象一下这样的设置:

在此处输入图像描述

我想要得到UIBUTTON相对于UIView的center个坐标.

换句话说,UIButton中心在UITableViewCell内可以是215,80,但是相对于UIView,它们应该更像260,165.我如何在两者之间转换?

以下是我try 过的:

[[self.view superview] convertPoint:button.center fromView:button];  // fail
[button convertPoint:button.center toView:self.view];  // fail
[button convertPoint:button.center toView:nil];  // fail
[button convertPoint:button.center toView:[[UIApplication sharedApplication] keyWindow]];  // fail

我可以通过循环浏览按钮的所有超级视图,并将x和y坐标相加来完成这项工作,但我怀疑这有点过头了.我只需要找到正确的covertPoint设置组合.正当

推荐答案

button.center是在its superview的坐标系内指定的中心,因此我 假设以下操作有效:

CGPoint p = [button.superview convertPoint:button.center toView:self.view]

或者,您可以在按钮自己的坐标系中计算按钮的中心,然后使用:

CGPoint buttonCenter = CGPointMake(button.bounds.origin.x + button.bounds.size.width/2,
                                   button.bounds.origin.y + button.bounds.size.height/2);
CGPoint p = [button convertPoint:buttonCenter toView:self.view];

Swift 4+

let p = button.superview!.convert(button.center, to: self.view)

// or

let buttonCenter = CGPoint(x: button.bounds.midX, y: button.bounds.midY)
let p = button.convert(buttonCenter, to: self.view)

Ios相关问答推荐

SwiftUI.从自定义视图修改器访问自定义视图子视图

由于代码签名时出错,无法在iOS设备上发布iOS Maui Build

如何在expo-react native中从ios平台中排除包

Flutter应用内购买无法恢复购买

Swift - 缺少函数参数在编译期间不会失败,甚至会导致不同的数据类型?

应用程序被杀死时如何在 flutter ios 应用程序中播放音频?

RealityKit – ARView 光线投射返回 0 个结果

使用 JSONDecoder 解码的对象的打印输出有问题

Swift Combine 防止初始值触发接收器并同时防止重复?

迁移到 UIKit 生命周期的应用程序不会调用 SceneDelegate

如何将私钥添加到分发证书?

通过按钮打开 AppStore

缺少推送通知权利

判断可选数组是否为空

如何从 UIPickerView 获取选定的值

Storyboard Segue 从视图控制器到自身

如何使用完成按钮制作 UIPickerView?

UIView - 加载视图时如何获得通知?

在 SKScene 中设置按钮

Xcode 5 和 iOS 7:架构和有效架构