Анимировать UIView масштаб до нуля - PullRequest
11 голосов
/ 29 октября 2011

У меня проблемы с анимацией масштаба изображения до нуля. Вот мой код:

[UIView animateWithDuration:0.3 animations:^{
    myView.transform = CGAffineTransformMakeScale(0.0, 0.0);
} completion:^(BOOL finished){

}];

По какой-то причине вид растягивается и сжимается горизонтально, как при выключении старой телевизионной трубки. Если вместо этого я сделаю шкалу (0.1, 0.1), она масштабируется правильно, но, конечно, не до нуля.

Почему это происходит?

Ответы [ 4 ]

12 голосов
/ 07 ноября 2014

Если кому-то все еще интересно, вот что я сделал (в Swift), чтобы заставить его работать (почти):

UIView.animateWithDuration(1, animations: {
    myView.transform = CGAffineTransformMakeScale(0.01, 0.01)
}, completion: nil)

Если продолжительность короткая, вы не увидите, что она не масштабируется точно до 0 и эффективно исчезает.

4 голосов
/ 24 апреля 2015

В случае, если у кого-то все еще есть эта проблема, проблема заключается в том, что аффинная матрица преобразования не является уникальной для масштабного коэффициента, равного нулю - нет способа узнать, как правильно «интерполировать» между исходной матрицей и нулевой матрицейТаким образом, вы получите странные эффекты, как вы описали.

Решение состоит в том, чтобы просто использовать небольшое, но ненулевое значение шкалы, например,

[UIView animateWithDuration:0.3
                 animations:^{ myView.transform = CGAffineTransformMakeScale(0.01, 0.01); }
                 completion:nil];
4 голосов
/ 29 октября 2011

Попробуйте:

[UIView animateWithDuration:0.3 animations:^{
    myView.frame = CGRectMake(myView.origin.x, myView.origin.y, 0.0, 0.0);
} completion:^(BOOL finished){
}];
3 голосов
/ 29 октября 2011

пожалуйста, используйте:

myView.layer.transform = CGAffineTransformMakeScale(0.0, 0.0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...