C# 无法在Xamarin.iOS中为微光设置渐变层动画
无法使用用于微光的CABasicAnimation设置渐变层动画C# 无法在Xamarin.iOS中为微光设置渐变层动画,c#,ios,xamarin,xamarin.ios,cabasicanimation,C#,Ios,Xamarin,Xamarin.ios,Cabasicanimation,无法使用用于微光的CABasicAnimation设置渐变层动画 CAGradientLayer gradientLayer = new CAGradientLayer(); gradientLayer.Colors = new CGColor[] { UIColor.Black.CGColor, UIColor.White.ColorWithAlpha(0.1F).CGColor, UIColor.Black.CGColor }; gradientLayer.StartPoint = new
CAGradientLayer gradientLayer = new CAGradientLayer();
gradientLayer.Colors = new CGColor[] { UIColor.Black.CGColor, UIColor.White.ColorWithAlpha(0.1F).CGColor, UIColor.Black.CGColor };
gradientLayer.StartPoint = new CGPoint(0, 0.5);
gradientLayer.EndPoint = new CGPoint(1.0, 0.525);
gradientLayer.Locations = new NSNumber[] { 0.4, 0.5, 0.6 };
gradientLayer.Frame = new CGRect(- shimmerView.Frame.Width, 0, 3 * shimmerView.Frame.Width, shimmerView.Frame.Height);
shimmerView.Layer.Mask = gradientLayer;
CABasicAnimation anmtn = new CABasicAnimation();
anmtn.KeyPath = "TransGrad";
anmtn.From = NSArray.FromObjects(new NSNumber[] { 0.0, 0.1, 0.2 });
anmtn.To = NSArray.FromObjects(new NSNumber[] { 0.8, 0.9, 1.0 });
anmtn.Duration = 2;
anmtn.RepeatCount = 1000;
gradientLayer.AddAnimation(animation, "loc");
我能够使用swift中相同的逻辑制作动画。请为Xamarin.iOS提供您的答案
迅捷的
问题似乎是为动画传递给
KeyPath
的值CAGradientLayer
没有属性Transcrad
,因此尝试使用该关键路径添加动画将不起作用
如果仅保留Swift版本的相同关键点路径,则动画的行为应相同:
CAGradientLayer gradientLayer = new CAGradientLayer();
gradientLayer.Colors = new CGColor[] { UIColor.Black.CGColor, UIColor.White.ColorWithAlpha(0.1F).CGColor, UIColor.Black.CGColor };
gradientLayer.StartPoint = new CGPoint(0, 0.5);
gradientLayer.EndPoint = new CGPoint(1.0, 0.525);
gradientLayer.Locations = new NSNumber[] { 0.4, 0.5, 0.6 };
gradientLayer.Frame = new CGRect(- shimmerView.Frame.Width, 0, 3 * shimmerView.Frame.Width, shimmerView.Frame.Height);
shimmerView.Layer.Mask = gradientLayer;
CABasicAnimation anmtn = new CABasicAnimation();
anmtn.KeyPath = "locations";
anmtn.From = NSArray.FromObjects(new NSNumber[] { 0.0, 0.1, 0.2 });
anmtn.To = NSArray.FromObjects(new NSNumber[] { 0.8, 0.9, 1.0 });
anmtn.Duration = 2;
anmtn.RepeatCount = 1000;
gradientLayer.AddAnimation(anmtn, "shimmer");
请注意,它是“locations”
,而不是“locations”
,因为此值最终会传递到本机iOS库,因此大小写必须与属性的命名方式匹配
如果这不能解决您的问题,您需要提供更多关于您的C#code中的
shimerview
和Swift代码中的self
以及调用这些代码片段的上下文的信息。Swift中此逻辑的代码是什么?@adlee dev更新了这篇文章。请检查您似乎根本没有在C代码中设置anmtn.to。很抱歉,在stackOverflow中粘贴代码时出错。
CAGradientLayer gradientLayer = new CAGradientLayer();
gradientLayer.Colors = new CGColor[] { UIColor.Black.CGColor, UIColor.White.ColorWithAlpha(0.1F).CGColor, UIColor.Black.CGColor };
gradientLayer.StartPoint = new CGPoint(0, 0.5);
gradientLayer.EndPoint = new CGPoint(1.0, 0.525);
gradientLayer.Locations = new NSNumber[] { 0.4, 0.5, 0.6 };
gradientLayer.Frame = new CGRect(- shimmerView.Frame.Width, 0, 3 * shimmerView.Frame.Width, shimmerView.Frame.Height);
shimmerView.Layer.Mask = gradientLayer;
CABasicAnimation anmtn = new CABasicAnimation();
anmtn.KeyPath = "locations";
anmtn.From = NSArray.FromObjects(new NSNumber[] { 0.0, 0.1, 0.2 });
anmtn.To = NSArray.FromObjects(new NSNumber[] { 0.8, 0.9, 1.0 });
anmtn.Duration = 2;
anmtn.RepeatCount = 1000;
gradientLayer.AddAnimation(anmtn, "shimmer");