Я хочу связать масштаб CAConstraint
, чтобы ширина CALayer
относительно его суперслоя могла указывать прогресс (QTMovie
) на основе переменной, которую я обновляю в запланированном таймере. метод, который срабатывает каждую секунду. Ширина CALayer
должна составлять 0,0f, если прогресс равен нулю, и 100% ширины суперслоя, когда прогресс завершен (т.е. currentProgress == 1.0f
). Я создал слой с ограничением следующим образом:
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
, записываю сумму, и она определенно обновляется. Однако, когда я обновляю сумму на основе нажатия кнопки, слой обновляется правильно.
Просто для примера, я обновляю переменную в моем методе NSTimer
в моем классе MediaPlayer
:
- (void) checkProgress:(NSTimer*)timer {
self.currentProgress += 0.01f;
NSLog(@"checkProgress: %f", currentProgress);
}
И при нажатии кнопки я обновляю его так:
self.currentProgress += 0.1f;
Почему ширина слоя не обновляется в зависимости от изменений в моем методе, а обновляется при нажатии кнопки? У кого-нибудь есть какие-нибудь идеи для меня, чтобы попытаться понять это?
Спасибо!