objective-c - 使用 Objective-C 宏访问 Swift 中的 UIView 帧测量

标签 objective-c swift sprite-kit

我刚刚开始在 Xcode 中从 Obj-C 转向 Swift。

是否无法再使用#define 中的宏?我知道我可以使用 let 来定义常量,但我习惯于在我的大多数程序顶部使用这组宏,例如:

    #define frameMinX CGRectGetMinX(self.frame)
    #define frameMinY CGRectGetMinY(self.frame)
    #define frameMidX CGRectGetMidX(self.frame)
    #define frameMidY CGRectGetMidY(self.frame)
    #define frameMaxX CGRectGetMaxX(self.frame)
    #define frameMaxY CGRectGetMaxY(self.frame)

    #define frameMin CGPointMake(frameMinX, frameMinY)
    #define frameMid CGPointMake(frameMidX, frameMidY)
    #define frameMax CGPointMake(frameMaxX, frameMaxY)

最佳答案

你不能在 Swift 中使用 #define,但是这些似乎都是在 UIView 的框架上计算的,所以你可以扩展 UIView 将它们添加为计算属性:

extension UIView {
    var frameMinX: CGFloat { return CGRectGetMinX(self.frame) }
    var frameMinY: CGFloat { return CGRectGetMinY(self.frame) }
    var frameMidX: CGFloat { return CGRectGetMidX(self.frame) }
    var frameMidY: CGFloat { return CGRectGetMidY(self.frame) }
    var frameMaxX: CGFloat { return CGRectGetMaxX(self.frame) }
    var frameMaxY: CGFloat { return CGRectGetMaxY(self.frame) }
    var frameMin: CGPoint  { return CGPointMake(frameMinX, frameMinY) }
    var frameMid: CGPoint  { return CGPointMake(frameMidX, frameMidY) }
    var frameMax: CGPoint  { return CGPointMake(frameMaxX, frameMaxY) }
}

使用示例:

UIView 的任何子类中,您可以像使用宏一样使用这些属性:

class CustomView: UIView {
    func demoProperties() {
        print(frameMinX)
        print(frameMax)
    }
}

let view = CustomView(frame: CGRect(x: 50, y: 100, width: 200, height: 300))

view.demoProperties()

输出:

50.0
(250.0, 400.0)

关于objective-c - 使用 Objective-C 宏访问 Swift 中的 UIView 帧测量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38286243/

相关文章:

ios - 找到UILabel的底部位置,以便可以在下面创建第二个UILabel

ios - 开始使用 iOS 推送通知

swift - 允许我的客户查询我的后端是否不好?

ios - 模态关闭后 viewWillAppear 没有更新旋转

ios - ReactiveCocoa 5 动画

objective-c - 在 Objective-C 中获取返回对象的类

iphone - 将 NSString 日期转换为 NSDate 或特定字符串

ios - SKAction 未删除 Sprite

ios - 调整使用 SKPhysicsBody 创建的 SpriteKit SKPhysicsBody 的大小(circleOfRadius :)

ios - SpriteKit 内存管理预加载缓存和 fps 问题