我正在尝试为旋转后的标签设置动画:
@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)
})
}
当我注释掉代码的旋转行(并保持标签不旋转)时,它可以正常工作。但是当我旋转它时,标签在动画开始时从屏幕开始:
如何在不放置此奇怪位置的情况下旋转图像并对其进行动画处理?
编辑:澄清一下:我希望标签从屏幕中央开始旋转,只需移动标签即可。我不想在动画过程中旋转图像。
答案 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
//
})