2

我有一个金色的 UILabel (shineLabel),我希望在用户倾斜设备时突出显示它。想想 iOS 6 的 Music.app 音量旋钮,但在文本上,需要遮罩。

目前,掩码占据了视图的 layer.mask 属性。当我在没有运动控制的情况下为该图层设置动画时,它完全按预期工作。突出显示在文本上方,并被字符的形状所掩盖。

现在我正在尝试实现 iOS 7 的 addMotionEffect:按照这些说明,但没有任何运气只是为面具制作动画。我的蒙版图层代码:

self.shineLabel.font = [UIFont fontWithName:@"GillSans-Light" size:28];
self.shineLabel.backgroundColor = [UIColor clearColor];
self.shineLabel.text = @"Hello";

[self addSubview:self.shineLabel];

// Create the mask and assign it to the shineLabel's layer.mask property
CALayer *maskLayer = [CALayer layer];

maskLayer.backgroundColor = [[UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0] CGColor];
maskLayer.contents = (id)[[UIImage imageNamed:@"highlight.png"] CGImage];

maskLayer.contentsGravity = kCAGravityCenter;
maskLayer.frame = CGRectMake(-self.journalLabelTitle.frame.size.width - 40, 0.0f, self.shineLabel.frame.size.width * 2, self.shineLabel.frame.size.height);

self.shineLabel.layer.mask = maskLayer;

以及对设备运动做出动画和反应的代码:

// Set horizontal effect
UIInterpolatingMotionEffect *horizontalMotionEffect =
[[UIInterpolatingMotionEffect alloc]
 initWithKeyPath:@"layer.mask.position.x"
 type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
horizontalMotionEffect.minimumRelativeValue = @(-40.0f);
horizontalMotionEffect.maximumRelativeValue = @(40.0f);

// Add effect to your view
[self.shineLabel addMotionEffect:horizontalMotionEffect];

如果我将 initWithKeyPath:"layer.mask.position.x" 更改为 "layer.position.x" 我可以移动视图的图层,但如果我尝试仅移动 layer.mask 似乎我不能。

任何人都可以帮我解决这个问题吗?

4

0 回答 0