2012-09-10 16 views
0

我有這個功能,轉型無法執行兩次

-(void)transitionstar{ 
star.hidden = NO; 
star2.hidden = NO; 
star3.hidden = NO; 
star4.hidden = NO; 
star5.hidden = NO; 
star6.hidden = NO; 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.4f]; 
[UIView animateWithDuration:0.0 animations:^{ 
    CGAffineTransform scale = CGAffineTransformMakeScale(1, 1); 
    CGAffineTransform rotate = CGAffineTransformMakeRotation(360.0); 
    CGAffineTransform rotate2 = CGAffineTransformMakeRotation(-360.0); 
    CGAffineTransform rotate3 = CGAffineTransformMakeRotation(-720.0); 
    CGAffineTransform rotate4 = CGAffineTransformMakeRotation(720.0); 
    CGAffineTransform rotate5 = CGAffineTransformMakeRotation(1080.0); 
    CGAffineTransform rotate6 = CGAffineTransformMakeRotation(-1080.0); 
    CGAffineTransform translate = CGAffineTransformMakeTranslation(-800, -800); 
    CGAffineTransform translate2 = CGAffineTransformMakeTranslation(600, -600); 
    CGAffineTransform translate3 = CGAffineTransformMakeTranslation(400, 400); 
    CGAffineTransform translate4 = CGAffineTransformMakeTranslation(-200, 200); 
    CGAffineTransform translate5 = CGAffineTransformMakeTranslation(900, -300); 
    CGAffineTransform translate6 = CGAffineTransformMakeTranslation(-200, 500); 

    CGAffineTransform transform = CGAffineTransformConcat(translate, scale); 
    transform = CGAffineTransformConcat(transform, rotate); 

    CGAffineTransform transform2 = CGAffineTransformConcat(translate2, scale); 
    transform2 = CGAffineTransformConcat(transform2, rotate2); 

    CGAffineTransform transform3 = CGAffineTransformConcat(translate3, scale); 
    transform3 = CGAffineTransformConcat(transform3, rotate3); 

    CGAffineTransform transform4 = CGAffineTransformConcat(translate4, scale); 
    transform4 = CGAffineTransformConcat(transform4, rotate4); 
    CGAffineTransform transform5 = CGAffineTransformConcat(translate5, scale); 
    transform5 = CGAffineTransformConcat(transform5, rotate5); 
    CGAffineTransform transform6 = CGAffineTransformConcat(translate6, scale); 
    transform6 = CGAffineTransformConcat(transform6, rotate6); 

    star.transform = transform; 
    star2.transform = transform2; 
    star3.transform = transform3; 
    star4.transform = transform4; 
    star5.transform = transform5; 
    star6.transform = transform6; 
} 
       completion:^(BOOL finished){ 
        if (finished) { 
         star.hidden = YES; 
         star2.hidden = YES; 
         star3.hidden = YES; 
         star4.hidden = YES; 
         star5.hidden = YES; 
         star6.hidden = YES; 
        } 
       }]; 
[UIView commitAnimations]; 
} 

當我把它稱爲第一次,它沒有工作。

但是,我再次調用同一視圖內,它不能執行並卡在那裏。

-hidden工作

轉變點不行

-rotation不行

-nslog工作

爲什麼第二次會變成這個樣子?

更新

if(!positionrepeat) 
     { 
      //Display Correct IMAGE; 
      [isrepeat addObject:[NSNumber numberWithInt:positionvalue]]; 
      //soundeffect = [self createSoundID: @"correct"]; 
      //AudioServicesPlaySystemSound(soundeffect); 
      [self displayresulttext:@"correct"]; 
      [self.view setNeedsDisplay]; 
      [self transitionstar]; 
      correct++; 
      completed.text = [NSString stringWithFormat:@"%d", correct]; 
      [self result]; 
     } 

這是我如何調用該函數。但是,它仍然是一樣的。

回答

0

在此位的代碼的變化變換

star.transform = transform; 
     star2.transform = transform2; 
     star3.transform = transform3; 
     star4.transform = transform4; 
     star5.transform = transform5; 
     star6.transform = transform6; 

爲如考慮您具有STAR1初始轉換爲x,現在您對 進行一些轉換計算....

CGAffineTransform rotate = CGAffineTransformMakeRotation(360.0); 
CGAffineTransform translate = CGAffineTransformMakeTranslation(-800, -800); 
CGAffineTransform transform = CGAffineTransformConcat(translate, scale); 
    transform = CGAffineTransformConcat(transform, rotate); 

然後

您改變了變換星X到Y的......

star.transform = transform;//say this is y 

現在你的星改造將成爲Ÿ好嗎?

再次再做通過調用這個代碼,以便再次您最初的星級變換爲y,你的變換等同於Y所以沒有必要和u沒有看到任何結果......

Y = Y所以沒有結果....

所以需要改變一些這樣的邏輯或一些你想要的邏輯,但這是一個想法...

第一次改變:你需要存儲每個星形的變換,所以你需要一些類型變量的變量..

CGAffineTransform star1Initial,star2Initial,star3Initial,star4Initial,star5Initial,star6Initial; 

第二次更改:您需要保存視圖中的恆星的初始轉換加載....

star1Initial=star1.transform; 
    star2Initial=star2.transform; 
    star3Initial=star3.transform; 
    star4Initial=star4.transform; 
    star5Initial=star5.transform; 
    star6Initial=star6.transform; 


-(void)transitionstar{ 
    star1.hidden = NO; 
    star2.hidden = NO; 
    star3.hidden = NO; 
    star4.hidden = NO; 
    star5.hidden = NO; 
    star6.hidden = NO; 

     star1.transform=star1Initial; 
     star2.transform=star2Initial; 
     star3.transform=star3Initial; 
     star4.transform=star4Initial; 
     star5.transform=star5Initial; 
     star6.transform=star6Initial; 


// [UIView beginAnimations:nil context:NULL]; 
// [UIView setAnimationDuration:0.4f]; 
    [UIView animateWithDuration:1.0 animations:^{ 
     CGAffineTransform scale = CGAffineTransformMakeScale(1, 1); 
     CGAffineTransform rotate = CGAffineTransformMakeRotation(360.0); 
     CGAffineTransform rotate2 = CGAffineTransformMakeRotation(-360.0); 
     CGAffineTransform rotate3 = CGAffineTransformMakeRotation(-720.0); 
     CGAffineTransform rotate4 = CGAffineTransformMakeRotation(720.0); 
     CGAffineTransform rotate5 = CGAffineTransformMakeRotation(1080.0); 
     CGAffineTransform rotate6 = CGAffineTransformMakeRotation(-1080.0); 
     CGAffineTransform translate = CGAffineTransformMakeTranslation(-800, -800); 
     CGAffineTransform translate2 = CGAffineTransformMakeTranslation(600, -600); 
     CGAffineTransform translate3 = CGAffineTransformMakeTranslation(400, 400); 
     CGAffineTransform translate4 = CGAffineTransformMakeTranslation(-200, 200); 
     CGAffineTransform translate5 = CGAffineTransformMakeTranslation(900, -300); 
     CGAffineTransform translate6 = CGAffineTransformMakeTranslation(-200, 500); 

     CGAffineTransform transform = CGAffineTransformConcat(translate, scale); 
     transform = CGAffineTransformConcat(transform, rotate); 

     CGAffineTransform transform2 = CGAffineTransformConcat(translate2, scale); 
     transform2 = CGAffineTransformConcat(transform2, rotate2); 

     CGAffineTransform transform3 = CGAffineTransformConcat(translate3, scale); 
     transform3 = CGAffineTransformConcat(transform3, rotate3); 

     CGAffineTransform transform4 = CGAffineTransformConcat(translate4, scale); 
     transform4 = CGAffineTransformConcat(transform4, rotate4); 
     CGAffineTransform transform5 = CGAffineTransformConcat(translate5, scale); 
     transform5 = CGAffineTransformConcat(transform5, rotate5); 
     CGAffineTransform transform6 = CGAffineTransformConcat(translate6, scale); 
     transform6 = CGAffineTransformConcat(transform6, rotate6); 

     star1.transform = transform; 
     star2.transform = transform2; 
     star3.transform = transform3; 
     star4.transform = transform4; 
     star5.transform = transform5; 
     star6.transform = transform6; 
    } 
        completion:^(BOOL finished){ 
         if (finished) { 
          star1.hidden = YES; 
          star2.hidden = YES; 
          star3.hidden = YES; 
          star4.hidden = YES; 
          star5.hidden = YES; 
          star6.hidden = YES; 
         } 
        }]; 
// [UIView commitAnimations]; 
} 

我希望這將幫助你....

嗨嘗試旋轉動畫這個代碼.....

- (void) runSpinAnimationWithDuration:(CGFloat) duration; 
{ 
    CABasicAnimation* rotationAnimation; 
    int rotations=1; 
    rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
    rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 /* full rotation*/ * rotations * duration ]; 
    rotationAnimation.duration = duration; 
    rotationAnimation.cumulative = YES; 
    rotationAnimation.repeatCount = 1.0; 
    rotationAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 
0

我假設你上面寫的方法在從UIView派生的類中工作。

如果這個假設是正確的,那麼當視圖必須被重畫時,你的方法可能會被調用。

重繪你的看法,你必須調用setNeedsDisplay方法,因爲這樣的:

[myCustomView setNeedsDisplay]; 
+0

它仍然是相同的,不能工作第二次 –