gpt4 book ai didi

c# - 无法在 Xamarin.iOS 中为微光设置动画渐变层

转载 作者:行者123 更新时间:2023-11-28 23:30:06 25 4
gpt4 key购买 nike

无法使用 CABasicAnimation 为微光设置渐变层动画。

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 的答案。

swift

let light = UIColor.white.withAlphaComponent(0.1)
let dark = UIColor.black.cgColor
let gradient: CAGradientLayer = CAGradientLayer()
gradient.colors = [dark, light, dark]
gradient.frame = CGRect(x: -self.bounds.size.width, y: 0, width: 3 * self.bounds.size.width, height: self.bounds.size.height)
gradient.startPoint = CGPoint(x: 0.0, y: 0.5)
gradient.endPoint = CGPoint(x: 1.0, y: 0.525)
gradient.locations = [0.4, 0.5, 0.6]
self.layer.mask = gradient

let animation: CABasicAnimation = CABasicAnimation(keyPath: "locations")
animation.fromValue = [0.0, 0.1, 0.2]
animation.toValue = [0.8, 0.9, 1.0]

animation.duration = 1.5
animation.repeatCount = HUGE
gradient.add(animation, forKey: "shimmer")

最佳答案

问题似乎是您为动画传递给 KeyPath 的值。 CAGradientLayer 没有属性 TransGrad 因此尝试使用该 KeyPath 添加动画将不起作用。

如果您只是保留与 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",因为这个值最终会传递给 native iOS 库,因此大小写必须与属性在那里的命名方式相匹配。

如果这不能解决您的问题,您需要提供有关 C# 代码中的 shimmerView 和 Swift 代码中的 self 的更多信息,以及调用这些代码片段的上下文。

关于c# - 无法在 Xamarin.iOS 中为微光设置动画渐变层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56922050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com