从公共中心一起旋转一组 UIView
Rotate group of UIViews together from common center
这是对 的跟进。我有一个类似的设置,有 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 { [=10=].center }.reduce(CGPoint.zero, +) / CGFloat(views.count)
views.forEach {
[=10=].transform = [=10=].transform.rotated(by: rotation)
let distance = [=10=].center - center
[=10=].center = center + CGPoint(
x: distance.x * cos(rotation) - distance.y * sin(rotation),
y: distance.y * cos(rotation) + distance.x * sin(rotation)
)
}
它与比例尺非常相似,你得到所有视图的中心,对于每个视图你得到到该中心的距离,使用公式旋转它以旋转一个点,并将旋转的距离添加到中心所有观看次数。
这是对
我知道如何对单个视图应用旋转,但在这里我想从公共中心而不是它们自己的中心旋转所有视图。
所以我尝试了这种方法
- 计算了所有选定视图的公共中心点
- 将视图翻译设置为指向此公共中心
- 并旋转视图
这就是我得到的
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 { [=10=].center }.reduce(CGPoint.zero, +) / CGFloat(views.count)
views.forEach {
[=10=].transform = [=10=].transform.rotated(by: rotation)
let distance = [=10=].center - center
[=10=].center = center + CGPoint(
x: distance.x * cos(rotation) - distance.y * sin(rotation),
y: distance.y * cos(rotation) + distance.x * sin(rotation)
)
}
它与比例尺非常相似,你得到所有视图的中心,对于每个视图你得到到该中心的距离,使用公式旋转它以旋转一个点,并将旋转的距离添加到中心所有观看次数。