2016-11-02 7 views
-1

私がしなければならないのは、循環的にいくつかのUIButtonをレイアウトし、ボタンがタップされたときにそのボタンが上の位置(円の上部、つまり円の最初のボタン)タップされたボタンが上に来るように、他のすべてのボタンは適切にアニメートする必要があります。
は今、私はいずれかのボタンをタップしたときにすべてのボタンが円状に移動しているようにそれが見えるように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もあまりにも曖昧です。あなたは、あなたがしようとしていることをあなたが知っていない人のことを十分に詳細に説明しようとしている必要があります。サークル内にボタンを配置するコードを投稿しましたが、回転コードは表示されませんでした。助けが必要なコードを確認する必要があります。 –

+0

任意のボタンを上に回転させてからもう一度タップし、すでに回転している位置から上に移動できるようにするには、すべてのボタンの現在の位置を知る必要があるようです。 –

+0

三角法を実行するか、フレームを手動で設定する必要はありません。その代わりに、円の中央にあるボタンをすべて重ねて配置し、トランスフォームを反時計回りに回転させ、平行移動して中心点を回るように設定します。 iOSのFYI座標はYで-1でスケーリングされたデカルトであり、Y軸は下向き、X軸は右向き、0は右向き、90は下向き、180は左向き、270は上向きです。回転は時計回りに進みます。 –

答えて

0

トランスフォームを使用してボタンを円で配布する方法を示す遊び場です(開始角度は0なので、現在の角度がどんなものであれ、すべてが移動します)。 270度または1.5ピリオドにあるものはいずれも円の上にあります。変換をアニメートして角度を変更することができます。ここでフレームを設定するのは、そのプレイグラウンドだからです。ストーリーボードの制約を使用して同じことを達成できます。

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 
関連する問題