CAConstraint
の尺度をバインドして、スーパーレイヤーに対するCALayer
の幅が、毎秒発生するスケジュールされたタイマーメソッドで更新中の変数に基づいて進行状況(QTMovie
)を示すようにしたいとします。 CALayer
の幅は、進行がゼロの場合は0.0f、進行が完了した場合はスーパーレイヤの幅の100%(つまりcurrentProgress == 1.0f
)になります。次のように私は制約を持つ層を作成した方法は次のとおりです。CAConstraintのスケールをバインドする方法は?
self.progressLayer = [[[CALayer alloc] init] autorelease];
progressLayer.name = @"progressLayer";
progressLayer.backgroundColor = [Utilities blackColour];
[progressLayer addConstraint:[CAConstraint constraintWithAttribute:kCAConstraintMinX relativeTo:@"superlayer" attribute:kCAConstraintMinX]];
[progressLayer addConstraint:[CAConstraint constraintWithAttribute:kCAConstraintHeight relativeTo:@"superlayer" attribute:kCAConstraintHeight]];
[progressLayer addConstraint:[CAConstraint constraintWithAttribute:kCAConstraintMidY relativeTo:@"superlayer" attribute:kCAConstraintMidY]];
CAConstraint* constraint = [CAConstraint constraintWithAttribute:kCAConstraintWidth relativeTo:@"superlayer" attribute:kCAConstraintWidth scale:0.0f offset:0.0f];
[constraint bind:@"scale" toObject:[MediaPlayer sharedMediaPlayer] withKeyPath:@"currentProgress" options:nil];
[progressLayer addConstraint:constraint];
私が持っている問題は、私は毎秒発射され、私の方法でcurrentProgress
変数を更新する際、CALayer
が更新されないということですそれはまったくの幅です。私のコードをテストすることから始めるには、進捗の値を0.01f
だけインクリメントしています。私はその量を記録しており、確実に更新しています。ただし、ボタンのクリックに基づいて量を更新すると、レイヤーが正しく更新されます。
ちょうど良い対策のために、これは私が私のMediaPlayer
クラス内で私のNSTimer
方法で変数を更新しています方法です:
- (void) checkProgress:(NSTimer*)timer {
self.currentProgress += 0.01f;
NSLog(@"checkProgress: %f", currentProgress);
}
そして、私はそうのようにそれを更新ボタンを押して上:
self.currentProgress += 0.1f;
私のメソッドの変更に基づいてレイヤの幅が更新されないのはなぜですか?誰も私にこれを試してみるために従うべきアイディアがありますか?
ありがとうございます!