ユーザーがデバイスを傾けたときに強調表示する金色の UILabel (shineLabel) があります。iOS 6 の Music.app のボリューム ノブを考えてみてください。ただし、テキストではマスクが必要です。
現在、マスクはビューの layer.mask プロパティを占めています。モーション コントロールを使用せずにこのレイヤーをアニメーション化すると、期待どおりに動作します。ハイライトはテキストの上を通過し、文字の形状によってマスクされます。
今、私は iOS 7 の addMotionEffect:asこれらの指示に従って実装しようとしていますが、マスクだけをアニメーション化する運がありません。マスクを含むレイヤーの私のコード:
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 だけを移動しようとするとできません。
誰でもこれを理解するのを手伝ってもらえますか?