Как анимировать UIView, уходя с экрана вправо, а затем снова появляясь слева - PullRequest
4 голосов
/ 27 декабря 2011

У меня есть вид, который содержится в основном виде моего приложения (квадрат в середине экрана).Я написал следующий код, который сдвигает вид с экрана вправо, если вы проведете его влево:

- (IBAction)swipeLeft:(id)sender
{
    CGRect initCardViewFrame = self.cardView.frame;
    CGRect movedCardToRightViewFrame = CGRectMake(initCardViewFrame.origin.x + 1000, initCardViewFrame.origin.y, initCardViewFrame.size.width, initCardViewFrame.size.height);

    [UIView animateWithDuration:0.7
                     animations:^{self.cardView.frame = movedCardToRightViewFrame;}
                     completion:nil];
}

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

Обновление:

Я ответил на этот вопрос ниже, но я не могу не думать, что есть лучший способ сделать этоэто без вложения анимации UIView внутри друг друга.Это единственный способ решить эту проблему?

Ответы [ 2 ]

4 голосов
/ 27 декабря 2011

В итоге я добавил следующий код в параметр «завершение»:

completion:^(BOOL finished)
{ 
    self.cardView.frame = moveCardToLeftViewFrame; 

    [UIView animateWithDuration:0.4 
                     animations:^{self.cardView.frame = initCardViewFrame;}
                     completion:nil];
}];

Примечание * moveCardToLeftViewFrame - это CGRect, который помещает вид слева от видимого окна. Поэтому после того, как он сдвинется вправо, он будет помещен за пределы экрана влево, а затем снова сдвинется в середину.

0 голосов
/ 10 июля 2013

вы можете использовать этот код в случае:

  1. вид выйдет за пределы экрана влево и войдет справа.
  2. вид выйдет за пределы экрана вправо и войдет слева.

код сниппирован:

- (void)animateViewWithTransformation:(MyEnumAnimationTransformation)animationTransformation withDuration:(CGFloat)duration {
    CGFloat goOutOffScreenToX, cameInToScreenFromX;
    switch (animationTransformation) {
        case goOutToLeftGetInFromRight:
            goOutOffScreenToX = -1 * [UIScreen mainScreen].applicationFrame.size.width;
            cameInToScreenFromX = [UIScreen mainScreen].applicationFrame.size.width;
            break;
        case goOutToRightGetInFromLeft:
            goOutOffScreenToX = [UIScreen mainScreen].applicationFrame.size.width;
            cameInToScreenFromX = -1 * [UIScreen mainScreen].applicationFrame.size.width;
            break;
        default:
            break;
    }

    CGRect originViewFrame = self.frame;
    [UIView animateWithDuration:duration
                     animations:^{[self setX:goOutOffScreenToX];}
                     completion:^(BOOL finished)
                                { 
                                    [self setX:cameInToScreenFromX];
                                    [UIView animateWithDuration:duration
                                                     animations:^{[self setX:originViewFrame.origin.x];}
                                                     completion:nil];
                                }];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...