ios - 在 NIB 中面临 CGAffineTransform 的问题
问题描述
我有 2 个视图 ( viewLeft
, viewRight
)。我通过计算相同的锚点以天使 0(初始设置)旋转这些视图,以便看起来视图正在跨铰链旋转。
我已经完成了下面的代码,如果我在故事板(viewcontroller)中获取视图,它工作正常,如果我在笔尖中复制并粘贴相同的视图和代码,它就不起作用。在 Nib 中,0 天使视图在它们之间留下一些空间。这是奇怪的行为,我检查了所有代码出口和约束,一切都很好,但无法弄清楚为什么它不起作用。
我希望它在 NIB 中工作。
任何帮助都将是可观的。
Github虚拟项目参考这里
输出:
从故事板
来自 XIB
代码工作
设置锚点
extension UIView {
func setAnchorPoint(_ point: CGPoint) {
var newPoint = CGPoint(x: bounds.size.width * point.x, y: bounds.size.height * point.y)
var oldPoint = CGPoint(x: bounds.size.width * layer.anchorPoint.x, y: bounds.size.height * layer.anchorPoint.y);
newPoint = newPoint.applying(transform)
oldPoint = oldPoint.applying(transform)
var position = layer.position
position.x -= oldPoint.x
position.x += newPoint.x
position.y -= oldPoint.y
position.y += newPoint.y
layer.position = position
layer.anchorPoint = point
}
}
旋转功能
func rotateView(_ addAngel : CGFloat) {
let rotateToAngel = angel + addAngel
guard rotateToAngel <= 0.6 && rotateToAngel >= -0.6 else {
return
}
angel = rotateToAngel
let anchorPointLeft = CGPoint(x: (viewLeft.frame.width - viewLeft.frame.height/2)/viewLeft.frame.width,
y: ( viewLeft.frame.height/2)/viewLeft.frame.height)
viewLeft.setAnchorPoint(anchorPointLeft)
let anchorPointRight = CGPoint(x: (viewRight.frame.height/2/viewRight.frame.width),
y: ( viewRight.frame.height/2)/viewRight.frame.height)
viewRight.setAnchorPoint(anchorPointRight)
self.viewLeft.transform = CGAffineTransform.init(rotationAngle: rotateToAngel)
self.viewRight.transform = CGAffineTransform.init(rotationAngle: -rotateToAngel)
}
解决方案
推荐阅读
- c - 分配给变量时Gettimeofday不起作用
- python - 将超级实例保存为类的变量是否被认为是一种好习惯?
- fiware - Orion-LD 的物联网代理
- java - 如何使用 Java 从 cli 中读取消息正文的段落
- c# - 如何将标签助手的内容放入标签中?
- machine-learning - 用两层最小化一个函数
- android - 如何在 Firebase 云消息传递 (FCM) 中使用深度链接
- javascript - 反应本机布局 - 视图未显示在可触摸的不透明度内
- jestjs - 如何在 Jest 中断言 Date 对象的日期和时间部分的相等性(chai-datetime 中的 equalDate 和 equalTime)
- openscad - OpenSCAD | 将文本缩放到特定宽度但不超过特定最大高度