如何通过CGAffineTransform使logo精准移至任意设备屏幕中心?
解决任意设备上Logo精准移动到屏幕中心的问题
嘿,这个坑我之前踩过!硬写死250这种固定数值肯定没法适配各种尺寸的设备,咱们得换用相对位置计算的思路,而不是依赖特定设备的像素值。下面给你几个靠谱的解决方案:
方法1:基于父视图坐标系计算偏移量(适配transform动画)
如果坚持要用CGAffineTransform做平移动画,你需要先算出Logo当前位置到父视图中心的偏移量,而不是用固定值:
// 获取父视图的中心(如果Logo直接在ViewController的view里,就用self.view) let parentCenter = CGPoint(x: self.view.bounds.midX, y: self.view.bounds.midY) // 计算当前Logo中心到父视图中心的Y轴偏移量 let offsetY = parentCenter.y - self.logoImage.center.y // 应用平移变换 self.logoImage.transform = CGAffineTransform(translationX: 0.0, y: offsetY)
注意:别直接用
UIScreen.main.bounds,除非你的父视图是完全全屏的。如果Logo在某个子容器里,一定要用容器视图的bounds来计算,不然位置会偏。
方法2:直接修改Center属性(更直观的动画方式)
其实做这种位置移动动画,直接修改center属性配合UIKit动画会更简单,而且天然适配所有设备:
UIView.animate(withDuration: 0.3) { // 将Logo的中心设置为父视图的中心 self.logoImage.center = CGPoint(x: self.view.bounds.midX, y: self.view.bounds.midY) }
这种方式不需要自己计算偏移量,系统会自动帮你处理不同设备的尺寸差异,代码也更易读。
为什么之前固定值不行?
iPhone 6的屏幕高度是667pt,屏幕中心的Y坐标是667/2 = 333.5。假设你的Logo初始Y坐标是83.5,那83.5 + 250 = 333.5刚好到中心,但换成iPhone 14 Pro Max(屏幕高度852pt),中心Y坐标是426,固定250的话就只能到83.5+250=333.5,离中心还差一大截。
内容的提问来源于stack exchange,提问作者Wizzardzz
相关产品推荐
相关产品推荐

