Базовая анимация, неожиданная анимированная позиция и значения hitTest - PullRequest
0 голосов
/ 01 ноября 2011

Когда я использую:

<code>CALayer *hitLayer = 
[[self.view.window.layer presentationLayer] hitTest:pointOfTouch]; 
Затем я исследую слой, чтобы обнаружить, что все свойства, которые анимируются в данный момент, установлены в их конечные состояния.

Слой, на котором я тестирую, - это CALayer UIImageView в iOS 4.3. У меня также есть IBOutlet для этого представления UIImage. Итак, я сделал такой же тест, как это:

<code>  CALayer *l = [self.topLeft.layer presentationLayer];
  NSLog(@"presentation layer frame for eloise is : %@", [self cgRectDescription:l.frame]);
  NSLog(@"and xPosition = %.2f, yPosition = %.2f & zPosition = %.2f", l.position.x, l.position.y, l.zPosition);
И я все еще получаю тот же результат.
Я проверяю это в (void) касаниях Beg: withEvent: пока изображение движется.
Вот анимация, которую я использую
<code>[UIImageView animateWithDuration:aDuration
                            delay:0
                          options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionBeginFromCurrentState
                       animations:^(void) {
                                  aIv.center = imageStartingPoint;
                                  aIv.layer.zPosition = 0;
                                  imageStartingPoint = CGPointZero;
                                  centerImage = nil;</p>

                              CABasicAnimation *ba = [CABasicAnimation animationWithKeyPath:@"shadowOffset"];
                              ba.fromValue = [NSValue valueWithCGSize:aIv.layer.shadowOffset];
                              ba.toValue = [NSValue valueWithCGSize:CGSizeMake(0, 0)];
                              aIv.layer.shadowOffset = CGSizeMake(0, 0);
                              ba.duration = aDuration;
                              ba.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
                              [aIv.layer addAnimation:ba forKey:@"shadowOffset"];

                              ba = [CABasicAnimation animationWithKeyPath:@"shadowRadius"];
                              ba.fromValue = [NSNumber numberWithFloat:aIv.layer.shadowRadius];
                              ba.toValue = [NSNumber numberWithFloat:0];
                              aIv.layer.shadowRadius = 0;
                              ba.duration = aDuration;
                              ba.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
                              [aIv.layer addAnimation:ba forKey:@"shadowRadius"];
                       } 
                       completion:NULL];    

Возможно, это немного простая вещь, но я не в курсе, спасибо,

1 Ответ

0 голосов
/ 02 ноября 2011

У меня есть решение.

Я только что изучил идею, я понял, что я не проверял, правильно ли значения CABasicAnimation (ов), где ведут себя корректно в уровне представления ... и ... они были.
Я должен был сделать те 2 в явной анимации, потому что неявное не поддерживалось.

Итак, я сделал более простую анимацию для центра изображения и zPosition. И теперь у меня есть информация на уровне представления.

Итак, на данный момент я могу заключить, что если вам нужно получить действительный слой представления, вам абсолютно необходимо выполнить EXPLICIT анимацию с CAAnimation.

Мне немного грустно, потому что мне понравился UIView animateWithDuration: ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...