iOS_convert point or rect 坐标和布局转换+判断

文章目录

    • [1. 坐标转换](#1. 坐标转换)
    • [2. 布局转换](#2. 布局转换)
    • [3. 包含、相交](#3. 包含、相交)

如:有3个色块

swift 复制代码
let view1 = UIView(frame: CGRect(x: 100.0, y: 100.0, width: 300.0, height: 300.0))
view1.backgroundColor = UIColor.cyan
self.view.addSubview(view1)

let view2 = UIView(frame: CGRect(x: 50.0, y: 50.0, width: 100.0, height: 100.0))
view2.backgroundColor = .red
view1.addSubview(view2)

let view3 = UIView(frame: CGRect(x: 100.0, y: 100.0, width: 100.0, height: 100.0))
view3.backgroundColor = .blue
view1.addSubview(view3)

1. 坐标转换

from: 从哪个坐标系 to: 到哪个坐标系

swift 复制代码
/// view1 上的 view2 在 self.view 上的位置
print("view2.center on self.view: \(view1.convert(view2.center, to: self.view))")
/// 同上
print("view2.center on self.view: \(self.view.convert(view2.center, from: view1))")

// print
// view2.center: (100.0, 100.0)
// view2.center on self.view: (200.0, 200.0)
// view2.center on self.view: (200.0, 200.0)

2. 布局转换

swift 复制代码
/// view1 上的 view2 在 self.view 上的位置
print("view2 on self.view: \(view1.convert(view2.frame, to: self.view))")
/// 同上
print("view2 on self.view: \(self.view.convert(view2.frame, from: view1))")

// print
// view2 on self.view: (150.0, 150.0, 100.0, 100.0)
// view2 on self.view: (150.0, 150.0, 100.0, 100.0)

3. 包含、相交

swift 复制代码
/// view1 是否包含 view2.center
print("view1 contains view2.center: \(CGRectContainsPoint(view1.frame, view2.center))")
/// view1 是否包含 view2
print("view1 contains view2: \(CGRectContainsRect(view1.frame, view2.frame))")
/// view2 和 view3 是否相交
print("view2 intersect view3: \(CGRectIntersectsRect(view2.frame, view3.frame))")

// print
// view1 contains view2.center: true
// view1 contains view2: false
// view2 intersect view3: true

github Demo

相关推荐
HarderCoder7 小时前
Swift Concurrency:彻底告别“线程思维”,拥抱 Task 的世界
swift
HarderCoder7 小时前
深入理解 Swift 中的 async/await:告别回调地狱,拥抱结构化并发
swift
Magnetic_h7 小时前
【iOS】锁的原理
笔记·学习·macos·ios·objective-c·cocoa·xcode
HarderCoder8 小时前
深入理解 SwiftUI 的 ViewBuilder:从隐式语法到自定义容器
swiftui·swift
HarderCoder8 小时前
在 async/throwing 场景下优雅地使用 Swift 的 defer 关键字
swift
东坡肘子8 小时前
我差点失去了巴顿(我的狗狗) | 肘子的 Swift 周报 #098
swiftui·swift·apple
Digitally8 小时前
将 iPhone 联系人转移到 Infinix 的完整指南
ios·cocoa·iphone
Swift社区19 小时前
Swift 实战:实现一个简化版的 Twitter(LeetCode 355)
leetcode·swift·twitter
HarderCoder20 小时前
当Swift Codable遇到缺失字段:优雅解决数据解码难题
swift
imLix1 天前
RunLoop 实现原理
前端·ios