从共同中心一起旋转UIViews组

这是对这个问题的跟进。 我有一个类似的设置与n个视图,我想与旋转手势一起旋转它们。

我知道如何将旋转应用于单个视图,但在这里我想将它们全部从公共中心旋转而不是自己的旋转。

所以我尝试了这种方法

  • 计算所有选定视图的公共中心点
  • 设置指向此公共中心的视图转换
  • 并旋转视图

所以这就是我得到的

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) ) } 

它与刻度非常相似,您获得所有视图的中心,对于每个视图,您获得到该中心的距离,使用公式旋转它以旋转点,并将旋转的距离添加到所有视图的中心。