2

ユーザーがデバイスを傾けたときに強調表示する金色の 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 だけを移動しようとするとできません。

誰でもこれを理解するのを手伝ってもらえますか?

4

0 に答える 0