gpt4 book ai didi

ios - 从公共(public)中心一起旋转一组 UIView

转载 作者:行者123 更新时间:2023-11-29 11:32:31 26 4
gpt4 key购买 nike

这是对 question 的跟进.我有一个类似的设置,有 n 个 View ,我想将它们与旋转手势一起旋转。

我知道如何对单个 View 应用旋转,但在这里我想从公共(public)中心而不是它们自己的中心旋转所有 View 。

所以我尝试了这种方法

  • 计算所有选定 View 的公共(public)中心点
  • 将 View 翻译设置为指向这个公共(public)中心
  • 并旋转 View

这就是我得到的

CGPoint newCenter =CGPointZero;
for(UIView *node in self.selectedNodes){
newCenter = CGPointMake(newCenter.x + node.center.x, newCenter.y + node.center.y);
}

newCenter = CGPointMake(newCenter.x/self.selectedNodes.count, newCenter.y/self.selectedNodes.count);
for(UIview *node in self.selectedNodes){
CGAffineTransform newTransform = CGAffineTransformMakeTranslation(groupCenter.x,groupCenter.y);
newTransform = CGAffineTransformRotate( node.transform,recognizer.rotation);
newTransform = CGAffineTransformTranslate(newTransform,-groupCenter.x, -groupCenter.y);
node.transform = newTransform;
}

但这并没有像预期的那样工作。非常感谢任何帮助..

最佳答案

又是我。这是我进行轮换的方法:

let rotation = recognizer.rotation
recognizer.rotation = 0
let center = views.map { $0.center }.reduce(CGPoint.zero, +) / CGFloat(views.count)
views.forEach {
$0.transform = $0.transform.rotated(by: rotation)
let distance = $0.center - center
$0.center = center + CGPoint(
x: distance.x * cos(rotation) - distance.y * sin(rotation),
y: distance.y * cos(rotation) + distance.x * sin(rotation)
)
}

它与比例非常相似,你得到所有 View 的中心,对于每个 View 你得到到该中心的距离,使用公式旋转它以旋转一个点,并将旋转的距离添加到所有 View 的中心.

关于ios - 从公共(public)中心一起旋转一组 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52052198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com