2014-02-18 7 views
2

Так что я пытаюсь выполнить (казалось бы) простую анимацию преобразования на UIImageView, просто переместив ее на 100 пунктов. Это мой код:iOS Transform Translate Анимация не работает правильно

[UIView animateWithDuration:1 delay:1 options:nil animations:^(void) { 
    CGAffineTransform tf = CGAffineTransformMakeTranslation(0, -100); 
    [image setTransform:tf]; 
} completion:^(BOOL finished) {} ]; 

Он работает ... но по какой-то причине выбирает новое начало для моего UIImageView, чтобы начать с. Например, если исходные координаты центра изображения (300, 400), то по моему коду он должен перевести на 100 пунктов (300, 300). Но по какой-то причине код делает изображение немного ниже, чем там, где он должен, например, вокруг (300, 450), а затем он будет подниматься на 100 до (300, 350). Как я могу заставить его сделать анимацию, откуда исходное изображение?

+0

Нет ничего плохого в этом коде, поэтому проблема, по-видимому, в другом месте. Вы используете Autolayout? Как вы добавили изображение в первую очередь? Если у вас нет этого кода, отображается ли изображение в «правильном» месте? – jrturton

+0

Да, это потому, что вы используете AutoLayout. Вам нужно анимировать ограничения, а не сам кадр. – Fogmeister

+0

Изображение не имеет ограничений, анимация ограничений не работает. Как отключить AutoLayout? Изображение помещается в файл макета xib, а не программно. Будет ли это программно помогать решить эту проблему? – StackOverflowMaster

ответ

0

Если вы предпочитаете использовать трансформацию для этой процедуры, вам следует попытаться получить исходное преобразование и перевести его на 100 пикселей.

[image setTransform:CGAffineTransformTranslate(image.transform, 0, -100)]; 
+0

Просто попробовал этот метод, точно такая же вещь. Серьезно не сложно сделать простой перевод из (x, y) в (x-dx, y-dy), если что-то не так, но, к сожалению, это так. Вздох. – StackOverflowMaster

0

Если ваша цель состоит в том, чтобы перевести подвид относительно системы координат своего SuperView, вы будете иметь более предсказуемые результаты просто анимировать недвижимости:

[UIView animateWithDuration: 1.0 animations:^{ 
    image.center = CGPointMake(image.center.x, image.center.y - 100); 
}]; 

преобразование свойства выражает аффинное преобразование по отношению к свойству центра (или привязке слоя, если он изменен).

+0

Этот метод не работает. – StackOverflowMaster

+0

Можете ли вы уточнить? Я тестировал код, и он отлично работал для меня. Можете ли вы предоставить больше окружающего кода для контекста? – 4bar

0

У меня такая же проблема. если я хочу перевести мою метку 100 по оси y, она запустит анимацию -50 в y, а затем переместит ее 100 оттуда. если я переместил его 200 в y, он запускает анимацию -100 в y, а затем перемещает ее 200 оттуда. это очень расстраивает.

@stackoverflowmaster, вы когда-нибудь могли это понять?

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

Смежные вопросы