代码之家  ›  专栏  ›  技术社区  ›  RameshVel

从公共中心一起旋转一组ui视图

  •  1
  • RameshVel  · 技术社区  · 6 年前

    这是这个的后续行动 question . 我有一个类似的设置,有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;
    }
    

    但这并不像预期的那样有效。非常感谢您的帮助。

    1 回复  |  直到 6 年前
        1
  •  1
  •   EmilioPelaez    6 年前

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