【问题标题】:Views in circle with animation带有动画的圆圈中的视图
【发布时间】:2016-11-02 21:25:47
【问题描述】:

我要做的是循环布置几个 UIButtons,每当点击任何按钮时,该按钮都应该动画到顶部位置(圆圈的顶部,即圆圈中的第一个按钮),因此所有其他按钮应该适当地制作动画,以便点击的按钮出现在顶部。
现在,我已经使用

循环排列了按钮
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];
}  

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

【问题讨论】:

  • 你的问题太含糊了。你需要足够详细地描述你正在尝试做的事情,以至于不是你的人知道你正在尝试做什么。您发布的代码显示将按钮放置在一个圆圈中,但没有显示您的旋转代码。我们需要查看您需要帮助的代码。
  • 在我看来,如果您希望能够将任意按钮旋转到顶部,然后再次点击,然后从已经 -旋转位置到顶部。
  • 您不需要做三角函数或手动设置框架。相反,您将所有按钮放在圆圈的中间,然后将变换设置为反向旋转它们,平移它们然后绕中心点运行。仅供参考,iOS 中的坐标是笛卡尔坐标系,在 Y 中按 -1 缩放,即 Y 轴指向下方,X 轴指向右侧,角度 0 位于右侧,90 度位于下方,180 度位于左侧,270 度位于上方。顺时针旋转。

标签: ios objective-c core-animation trigonometry


【解决方案1】:

这里是一个游乐场,展示了如何使用变换将按钮分布在一个圆圈中(起始角度为零,所以只需添加当前角度应该是的任何东西,所有东西都会移动)。无论是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多