2016-11-02 6 views
-1

내가해야할 일은 원형의 UIButton을 거의 배치하지 않고 버튼을 탭할 때마다 버튼이 원위치 (원의 상단, 즉 원의 첫 번째 버튼)에 애니메이션을 적용해야하므로 다른 모든 버튼은 탭 버튼이 맨 위에 오도록 적절하게 애니메이션되어야합니다.
자, 원 I 어떤 버튼이 태핑 될 때 모든 버튼 원 움직이는 것처럼 보이도록 CAAnimation를 이용하여 Z 축을 중심이 뷰 회전있어애니메이션이있는 동그라미에서의 뷰

double perAngle = 2 * M_PI/BUTTONS_COUNT; 

for (int i = 0; i < BUTTONS_COUNT; i++) { 
    UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(sin(perAngle * i) + basePoint.x, cos(perAngle * i) + basePoint.y, Width, Height)]; 

    [self.View addSubView:btn]; 
} 

을 사용하여 버튼을 배치했다. 문제는 회전 할 각도를 결정할 수 없기 때문에 탭 버튼 만 다른 버튼이 아닌 상단으로 오게됩니다.
또는이를 달성하기위한 완전히 다른 접근 방식이 있습니까?

+0

WAAAAY too 막연합니다. 당신은 당신이하려고하는 것을 당신이 알지 못하는 누군가가 충분히 자세하게 설명하려고 할 필요가 있습니다. 버튼을 서클에 배치했지만 회전 코드를 표시하지 않았다는 코드를 게시했습니다. 도움이 필요한 코드를 확인해야합니다. –

+0

임의의 버튼을 맨 위로 돌릴 수 있고 다시 누른 다음 이미 회전 한 위치에서 맨 위로 이동할 수있게하려면 모든 버튼의 현재 위치를 알아야합니다. –

+0

삼각법을 수행하거나 프레임을 수동으로 설정할 필요가 없습니다. 대신 원의 가운데에있는 모든 버튼을 서로 겹쳐 놓은 다음 변형을 설정하여 회전시키고 반경을 변환 한 다음 중심점을 궤도에 그리게됩니다. 참고로, 좌표는 Y 축에서 -1로 스케일 된 직교 좌표입니다. 즉, Y 축은 아래쪽을 가리키고, X 축은 오른쪽을 가리키며, 각도 0은 오른쪽에, 90은 아래로, 180은 왼쪽에 있고 270은 위로입니다. 회전은 시계 방향으로 진행됩니다. –

답변

0

변형을 사용하여 원 안에 버튼을 분배하는 방법을 보여주는 놀이터입니다 (시작 각도는 0이므로 현재 각도가 있어야하고 모든 것이 이동합니다). 270도 또는 1.5 pi의 모든 것이 원 위에 표시됩니다. 변형을 애니메이션으로 만들어 각도를 변경할 수 있습니다. 놀이터이기 때문에 여기에 프레임을 설정하고 있습니다. 스토리 보드에서 제약 조건을 사용하여 동일한 결과를 얻을 수 있습니다.

let view = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500)) 
    let buttonCount = 6 
    for i in 0..<buttonCount { 
     let button = UIButton() 
     button.center = view.center 
     button.setTitle("button \(i)", for: .normal) 
     button.sizeToFit() 
     view.addSubview(button) 
     var transform = CGAffineTransform(rotationAngle: -2 * CGFloat.pi * CGFloat(i)/CGFloat(buttonCount)) 
      .translatedBy(x: 100, y: 0) 
      .rotated(by: 2 * CGFloat.pi * CGFloat(i)/CGFloat(buttonCount)) 
     button.transform = transform 
    } 

    PlaygroundPage.current.liveView = view