простая анимационная цепочка UIView не работает - PullRequest
0 голосов
/ 18 ноября 2010

Я пытаюсь вставить UIImageView в UIView и одновременно добавить его. И тогда я хочу, чтобы он исчез и выскользнул. Код ниже должен сделать это, но это не так. Вместо этого представление leftArrow находится в полной альфе, когда оно вставляется. Таким образом, первая анимация пропускает постепенное появление альфы. Затем вторая анимация просто затухает, она не перемещает представление leftArrow. Я перепробовал множество вариантов (использование границ вместо фреймов, анимация в методе класса (в отличие от метода экземпляра), и я не могу определить, почему представление, по-видимому, произвольно выбирает одну вещь вместо другой, или оба. Может быть, мне просто нужны свежие глаза. ТИА, Mike

- (void) flashHorizontalArrowsForView: (UIView *)view {
DebugLog(@" flashHorizontalArrows");


    float duration = 1.5f;

    // create the views
    UIImageView *leftArrow = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"leftCouponDetailArrow.png"]];
    leftArrow.frame = CGRectMake(0 -leftArrow.image.size.width, 
                                 HORIZONTAL_ARROW_START_Y, 
                                 leftArrow.image.size.width, 
                                 leftArrow.image.size.height);

    [view addSubview:leftArrow];
    leftArrow.alpha =  0.0f;

    // animate them in...
    [UIView beginAnimations:@"foo" context:leftArrow];
    [UIView setAnimationDelay:    0.0f ];       // in seconds   
    [UIView setAnimationDuration: duration ];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
    [UIView setAnimationDidStopSelector:@selector(animationReallyDidStop:finished:context:)];
    [UIView setAnimationDelegate:self];

    leftArrow.alpha = 1.0f;

    CGRect LFrame = leftArrow.frame;
    LFrame.origin.x += LFrame.size.width;  // move it in from the left.
    leftArrow.frame = LFrame;

    [UIView commitAnimations];

    // and animate them out
    // delay enough for the first one to finish  
    [UIView beginAnimations:@"bar" context:leftArrow];
    [UIView setAnimationDelay:    duration+0.05 ];       // in seconds  
    [UIView setAnimationDuration: duration ];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
    [UIView setAnimationDidStopSelector:@selector(animationReallyDidStop:finished:context:)];
    [UIView setAnimationDelegate:self];
    leftArrow.alpha  = 0.0f;

    CGRect LLFrame = leftArrow.bounds;
    LLFrame.origin.x -= LLFrame.size.width;  // move it off to the left.
    leftArrow.bounds = LLFrame;

    [UIView commitAnimations];

}

1 Ответ

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

Решение простое - когда первая анимация заканчивается, попросите ее вызвать другой метод, например, Horizontal2 и Horizontal2, выполнить часть animate_them_out.

- (void) flashHorizontalArrowsForView: (UIView *)view{
DebugLog(@" flashHorizontalArrows");
self.theView = view;

float duration = 1.5f;

// create the views
UIImageView *left = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"leftCouponDetailArrow.png"]];
self.leftArrow = left;
[left release];
leftArrow.tag = LEFT_ARROW_TAG;
leftArrow.frame = CGRectMake(0 -leftArrow.image.size.width, 
                             HORIZONTAL_ARROW_START_Y, 
                             leftArrow.image.size.width, 
                             leftArrow.image.size.height);

[theView addSubview:leftArrow];
leftArrow.alpha =  0.0f;

UIImageView *right = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"rightCouponDetailArrow.png"]];
self.rightArrow = right;
[right release];
rightArrow.tag = RIGHT_ARROW_TAG;
rightArrow.frame = CGRectMake(view.frame.size.width, // -leftArrow.image.size.width, 
                             HORIZONTAL_ARROW_START_Y, 
                             leftArrow.image.size.width, 
                             leftArrow.image.size.height);

[theView addSubview:rightArrow];
rightArrow.alpha =  0.0f;

// --------------------------------------------
// animate them in...
[UIView beginAnimations:@"foo" context:nil];
[UIView setAnimationDelay:    0.0f ];       // in seconds   
[UIView setAnimationDuration: duration ];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView setAnimationDidStopSelector:@selector(horizontalPart2)];
[UIView setAnimationDelegate:self];

leftArrow.alpha  = 1.0f;
rightArrow.alpha = 1.0f;

CGRect LFrame = leftArrow.frame;
LFrame.origin.x += LFrame.size.width;  // move it in from the left.
leftArrow.frame = LFrame;

CGRect RFrame = rightArrow.frame;
RFrame.origin.x -= RFrame.size.width;  // move it in from the right.
rightArrow.frame = RFrame;
[UIView commitAnimations];

}

 - (void) horizontalPart2 {

// --------------------------------------------
// and animate them out
// delay enough for the first one to finish  
[UIView beginAnimations:@"bar" context:nil];
[UIView setAnimationDelay:    1.0f ];       // in seconds   
[UIView setAnimationDuration: 3.0f ];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
[UIView setAnimationDidStopSelector:@selector(horizontalAnimationDidStop:finished:context:)];
[UIView setAnimationDelegate:self];


CGRect LLFrame = leftArrow.frame;
LLFrame.origin.x -= LLFrame.size.width;  // move it off to the left.  // THIS IS NOT HAPPENING.
leftArrow.frame = LLFrame;

CGRect RFrame = rightArrow.frame;
RFrame.origin.x += RFrame.size.width;
rightArrow.frame = RFrame;

leftArrow.alpha   = 0.0f;
rightArrow.alpha  = 0.0f;

[UIView commitAnimations]; 

}

...