2010-11-18 30 views
0

UIImageView cihazını bir UIView uygulamasına kaydırmaya ve aynı anda silmeye çalışıyorum. Ve sonra solması ve kaymasını istiyorum. Aşağıdaki kod bunu yapmalıdır, ancak yapmaz. Bunun yerine, leftArrow görünümü, slaytta tam olarak alfa. Bu nedenle, ilk animasyon alfa fade-in'i atlıyor. Daha sonra ikinci animasyon soluklaşır, soldaki görünüşü hareket ettirmez. Çok sayıda varyasyon denedim (çerçeveler yerine sınırlar kullanarak, bir sınıf yönteminde (örnek yönteminin tersine) animasyonu yapıyordum ve görüşün neden diğerinden ziyade bir şeyi yapmak istediğini belirleyemem. . ya da her ikisi Belki sadece taze gözlerime ihtiyacım TIA, Mikebasit UIView animasyon zinciri çalışmıyor

- (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]; 

}

+0

btw ben XCode 3.2.4 çalıştırıyorum ve bu animasyon 4.1 iPhone simülatörü ve 3.1.3 cihazla başarısız olur. – Rayfleck

cevap

0

Çözüm basittir -. ilk animasyon bitirir, bu horizontal2 gibi başka bir yöntemi çağırmak varken ve horizontal2 içinde animate_them_out bölümü yapılıyor

- (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]; 

}

İlgili konular