UIButton, масштабированный с базовой анимацией, не меняет область попадания - PullRequest
2 голосов
/ 14 марта 2011

У меня есть uibutton, который я оживляю, чтобы уменьшить масштаб. Но область попадания не уменьшается вместе с ним и остается в своем оригинальном размере.

мой код:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];

float widthScale = size.width / view.frame.size.width;
float heightScale = size.height / view.frame.size.height;

animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(widthScale, heightScale, 1.0)];

CAAnimationGroup *animGroup = [CAAnimationGroup animation];
animGroup.animations = [NSArray arrayWithObjects:animation];
animGroup.duration = 0.5;
animGroup.removedOnCompletion = NO;
animGroup.fillMode = kCAFillModeForwards;

[view.layer addAnimation:animGroup forKey:nil];

У кнопки есть изображение, которое я установил с помощью setImage: forState: Я даю кнопке рамку и помещаю autoresizeSubviews в YES

Ответы [ 2 ]

0 голосов
/ 06 июня 2012

Это старая дискуссия, но я только что столкнулся с подобной ситуацией, и на этот вопрос, похоже, нет реального ответа ...

Слои не реагируют на прикосновения напрямую (делегат касаний является только контроллером UIView, но не лежащим в его основе CALayer). Возможное решение для исправления области попадания после анимации слоя состоит в том, чтобы изменить свойство view.frame (для заднего вида), адаптируя его размер и происхождение явно / «вручную» к окончательному (ожидаемому) размеру анимированный слой.

Преобразованный view.frame позволит снова реагировать на прикосновения в правильной области, не затрагивая анимированную форму CALayer. Другими словами, объект CALayer и свойство frame UIView кажутся несвязанными.

0 голосов
/ 14 марта 2011

CAAnimation весы / и т. Д.нижележащий слой представления;само представление занимает те же границы.Чтобы изменить само представление, попробуйте использовать анимационный блок UIView и изменить свойство преобразования представления.

...