快速动画化旋转的标签?

时间:2019-03-28 16:21:41

标签: ios swift iphone animation uiviewanimation

我正在尝试为旋转后的标签设置动画:

@IBOutlet fileprivate weak var loadingLabel: UILabel!

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        loadingLabel.transform = CGAffineTransform(rotationAngle: CGFloat(0.2))  // rotation line

        UIView.animate(withDuration: 2.0, animations: {
            self.loadingLabel.transform = CGAffineTransform(translationX: 0, y: self.view.bounds.size.height)
        })
    }

当我注释掉代码的旋转行(并保持标签不旋转)时,它可以正常工作。但是当我旋转它时,标签在动画开始时从屏幕开始: enter image description here

当我注释掉动画时,标签旋转得很好(但显然没有动画): enter image description here

如何在不放置此奇怪位置的情况下旋转图像并对其进行动画处理?

编辑:澄清一下:我希望标签从屏幕中央开始旋转,只需移动标签即可。我不想在动画过程中旋转图像。

3 个答案:

答案 0 :(得分:1)

您可以使用 CABasicAnimation 来执行动画,因为它可以为您提供对动画的更多控制,并且它具有完成块,您可以根据需要在其上隐藏标签。

onSumbmitFlowGAkQ: function () {
            var oParameters = {
                "value": this.getView().byId("flowInputGAK").getValue()
            };

            $.ajax({
                url: "private url",
                type: 'POST',
                data: JSON.stringify(oParameters),
                contentType: 'application/json',
                success: function (data) {
                    this.getView().setModel(new JSONModel(data), "guidedAssistanceGAK");
                    this.setUpDialog();
                }.bind(this),
                error: function (e) {
                    MessageToast.show(e.status);
                }
            });

setUpDialog: function () {
            var lst = new List({
                items: {
                    path: "guidedAssistanceGAK>/flow",
                    template: new StandardListItem({
                        title: "{guidedAssistanceGAK>value}",
                        counter: "{guidedAssistanceGAK>ID}"
                    })
                }
            });
            var dialog = new Dialog({
                title: "choose one",
                content: lst,
                beginButton: new Button({
                    text: "OK",
                    press: function () {
                        dialog.close();
                    }
                }),
                afterClose: function () {
                    dialog.destroy();
                }
            });
            dialog.open();
            //this.oEditor.oRichTextEditor.setValue(this.getView().getModel("guidedAssistanceGAK").getProperty("/flow"));
        },

希望它会对您有所帮助。

答案 1 :(得分:1)

正确的答案是您应该串联转换矩阵。如果您不想做线性代数,那么简单的方法是使用变换来设置旋转并且不对其进行动画处理,而是对视图的框架/中心进行动画处理。

import UIKit

class V: UIViewController {
    @IBOutlet var label: UILabel!
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        label.transform = CGAffineTransform(rotationAngle: CGFloat.pi / 6)
        label.center.x += 300
        UIView.animate(withDuration: 2) {
            self.label.center.x -= 300
        }
    }
}

答案 2 :(得分:0)

第一个转换是动画块的另一部分,这就是为什么它开始出现在屏幕之外的原因。 您应该将其移动到动画块中,并使用完成处理程序再次进行动画处理。

UIView.animate(withDuration: 2.0, animations: {
            //
        }, completion: { (result) in
            //
        })

  • 请注意,角度以弧度为单位。