带动画的圆圈视图

时间:2016-11-02 21:25:47

标签: ios objective-c core-animation trigonometry

我要做的是循环布置几个UIButton,并且每当按下任何按钮时,该按钮应该动画到顶部位置(圆圈的顶部,即圆圈中的第一个按钮),因此所有其他按钮应该适当地动画,以便轻敲按钮到达顶部 现在,我已经使用

循环安排了这些按钮
  ArrayList<ItemsHolder> array_list = new ArrayList<>();
    SQLiteDatabase db = mydb.getReadableDatabase();
    Cursor res =  db.rawQuery("select * from Todo", new String[]{COLUMN_ID});
    while(res.moveToNext()) {
        ItemsHolder itemsHolder = new ItemsHolder();
        itemsHolder.item = res.getString(res.getColumnIndex(ITEM_NAME));
        array_list.add(itemsHolder);
    }
        TodoCursorAdapter todoAdapter = new TodoCursorAdapter(this, res);
        // Attach cursor adapter to the ListView
        lvItems.setAdapter(todoAdapter);

我正在使用CAAnimation围绕z轴旋转此视图,以便在点击任何按钮时看起来所有按钮都以圆圈移动。问题是我不能决定旋转的角度,以便每次只有轻敲按钮到达顶部而不是任何其他按钮。
或者任何其他完全不同的方法来实现这一目标?

1 个答案:

答案 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
相关问题