我要做的是循环布置几个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轴旋转此视图,以便在点击任何按钮时看起来所有按钮都以圆圈移动。问题是我不能决定旋转的角度,以便每次只有轻敲按钮到达顶部而不是任何其他按钮。
或者任何其他完全不同的方法来实现这一目标?
答案 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