动画按钮的图像旋转

时间:2019-01-10 22:02:29

标签: ios iphone xamarin xamarin.ios

我正在创建UIButton,并将其添加到自定义UITabBar中的UITabBarController上方。

var button = new UIButton(new CGRect(x, y, 50, 50));
button.Layer.BorderWidth = 2;
button.Layer.CornerRadius = button.Frame.Height / 2;
button.SetImage(UIImage.FromBundle("Name"), UIControlState.Normal);

this.View.AddSubview(button);
this.View.LayoutIfNeeded();

当我尝试在图像视图上添加旋转变换时,它不会像我期望的那样在中心和z轴上旋转(并在我阅读的所有文档中找到)。

相反,它的动画效果有所不同。
无论是否在ImageView或其图层上添加转换,都是一样的。
例如,这是30度(pi / 180 * 30)和10度的旋转。

enter image description here enter image description here

但是,当我将SublayerTransform添加到按钮层时,它会按预期进行转换。这种方法的问题在于它无法与UIView.AnimateCATransaction.Begin进行动画处理。

PositionAnchorPoint,其他所有内容均设置为默认值。我也尝试过使用这些属性,但无济于事。

从图像中可以看到,这是一个+信号,应该经过动画处理才能变成x

非常感谢任何提示。

我定义的3D转换是这样的:

CATransform3D.MakeRotation((float)(Math.PI / 180 * 45), 0, 0, 1)

以及像这样的普通人:

CGAffineTransform.MakeRotation((float)(Math.PI / 180 * 45))

1 个答案:

答案 0 :(得分:1)

如果出于某种原因仅需要旋转按钮图像视图,请尝试以下操作:

button.ImageView.Layer.Transform = CATransform3D.MakeRotation((float)(Math.PI / 180 * 45), 0.0001f, 0.0001f, 1);

在将x和y值设置为0的情况下,似乎应该在x和y轴上旋转,尽管不应旋转。值为45度时,它也会同时旋转x和y,以便您看到图像边缘在上面(因此似乎将x和y旋转了90度),即消失了。为X和y设置一个较小的值似乎可以避免此错误。我要看看这是Xamarin独有的,还是iOS的东西。

编辑:我刚刚在Xcode的Obj-C中对此进行了测试,并得到了完全相同的行为,因此这不是Xamarin问题,而是iOS问题以及它如何处理UIButton中的UIImageView。对于UIButton中 not 的UIImageView,不会发生相同的问题。