проблема с анимацией uiimageView - PullRequest
0 голосов
/ 22 июля 2011

вот мой код:

-(void) createNewImage {
UIImage * image = [UIImage imageNamed:@"boutonplay_03.png"];
imageView = [[UIImageView alloc] initWithImage:image];

[imageView setCenter:[self randomPointSquare]];
[[self view] addSubview:imageView];
ix=imageView.center.x;
iy=imageView.center.y;

X=(240-ix)/230;
Y=(160-iy)/230;

}

-(void)Animation{

imageView.center = CGPointMake(imageView.center.x + X, imageView.center.y + Y);

}

«CreateNewImage» разрешается каждые 2 секунды, и CADisplayLink включен »Анимация ".

Моя проблема в том, что анимация" imageView "останавливается каждые 2 секунды, потому что создается новый" imageView ", и это последнее начало движения, и оно останавливается снова через 2 секунды, и снова, и снова, и снова... Я хотел бы, чтобы imageView продолжал свою анимацию, несмотря на создание нового imageView. Как я могу это сделать, пожалуйста?извините за мой английский я француз: /

Ответы [ 3 ]

0 голосов
/ 22 июля 2011

Вы создаете новый UIImageView каждый раз, когда вместо этого вызываете CreateNewImage

, проверьте, не создан ли он уже.

-(void) createNewImage {
if(imageView == nil) {
     UIImage * image = [UIImage imageNamed:@"boutonplay_03.png"];
     imageView = [[UIImageView alloc] initWithImage:image];
}

[imageView setCenter:[self randomPointSquare]];
[[self view] addSubview:imageView];
ix=imageView.center.x;
iy=imageView.center.y;

X=(240-ix)/230;
Y=(160-iy)/230;

}
0 голосов
/ 22 июля 2011

Если я правильно понимаю ваш случай, что произойдет так:

  1. вы создадите новое изображение в createNewImage;

  2. thisИзображение анимируется с помощью метода:

    -(void)Animation{
       imageView.center = CGPointMake(imageView.center.x + X, imageView.center.y + Y);
    }
    

    , который анимирует ваш imageView ivar;

  3. при создании нового изображения, через 2 секунды вы переназначаете егона imageView ivar, так что метод Animation может анимировать его при вызове;

  4. в то же время, вы потеряли ссылку на свое предыдущее изображение, которое выраньше анимировали, поэтому анимация больше не будет анимировать.

Теперь я предлагаю изменить Animation следующим образом:

    -(void)Animation{
       for (UIView* imgView in self.view.subviews) {
            imgView.center = CGPointMake(imgView.center.x + X, imgView.center.y + Y);
       }
    }

Итак,это просто оживит любое подпредставление вашего основного вида.Если ваши единственные подпредставления - это изображения, которые вы хотите анимировать, все должно быть в порядке.

РЕДАКТИРОВАТЬ:

Из вашего описания в комментариях, мне кажется, что происходит то, что addSubviewимеет эффект короткой остановки всех анимаций.Я не знаю, связано ли это с загрузкой изображений с диска, но я помню, что у меня тоже была похожая проблема.Единственный подход, который я вижу, - это предварительно создать и предварительно добавить все нужные вам UIImageViews (или максимальное количество разрешенных изображений), сделать их скрытыми, а затем снова сделать их видимыми один за другим.Это сделало бы логику вашей программы более сложной, но она бы работала.

Другой подход мог бы использовать CALayer с вместо UIVIew с.Лучше всего было бы использовать CABasicAnimation для анимации ваших изображений.

Если вы хотите использовать UIImageView, вы можете получить [imageView layer] и добавить это вместо представления, например:

[[self.view layer] addSublayer:[imageView layer]];

но я не уверен, что этот подход сработает.

Надеюсь, что это поможет.

0 голосов
/ 22 июля 2011

Проверьте, если imageView == ноль или нет.

if (imageView == nil) {
 imageView = [[UIImageView alloc] initWithImage:image];
}
//rest of code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...