2010-07-13 9 views
0

im nouveau à la programmation iPhone .. dans mon application, la minuterie ne fonctionne pas bien. quelqu'un peut me aider ... s'il vous plaît Voici le code pour animer quelques images WN nous touchons ou swipe..they tombonsNSTimer ne fonctionne pas bien ..in Animation dans l'iPhone

je veux limiter les touches pendant quelques secondes avec l'utilisation de la minuterie ... est-il une autre façon de le faire ..? (avant d'utiliser son horloge se brisant sur l'appareil, mais fonctionne très bien dans la simulator..im essayer de solution pour écraser ..)

// HomeViewController.m 


#import "HomeViewController.h" 

@implementation HomeViewController 

@synthesize dustImage, myAnimatedView; 

@synthesize _isAnimating = isAnimating; 

float ver_X, ver_Y; 
BOOL rotated; 
NSTimer *touchTimer; 


- (void)viewDidLoad { 

    [super viewDidLoad]; 
    self.view.frame = [[UIScreen mainScreen] bounds]; 
    //[self playAudio]; 

} 

-(void)blowingTheSparkles:(NSSet *) touches { 

    if(!isAnimating){ 
     float a, aa; 
     float b, bb; 

     CGRect frame1; 
     myAnimatedView = [UIImageView alloc]; 

     //NSLog(@"touch count...%d",[touches count]); 
     for (int i=0; i< (int)[touches count]; ++i) { 
      UITouch* touch = [[touches allObjects] objectAtIndex:i]; 
      CGPoint location = [touch locationInView:dustImage]; 

      NSArray *myImages = [NSArray arrayWithObjects: [UIImage imageNamed:@"starburst1.png"], 
           [UIImage imageNamed:@"starburst2.png"], 
           [UIImage imageNamed:@"starburst3.png"], 
           [UIImage imageNamed:@"starburst4.gif"], 
           [UIImage imageNamed:@"starburst5.png"], 
           [UIImage imageNamed:@"starburst6.png"], 
           [UIImage imageNamed:@"starburst7.png"],nil]; 
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200 
      a=(location.x)-80; 
      b=(location.y)-80; 
      ver_X=768; 
      ver_Y=1024;  

      frame1 = CGRectMake(a,b,160,160); 

#else 

      a=(location.x)-40; 
      b=(location.y)-40; 
      ver_X=320; 
      ver_Y=480; 

      frame1 = CGRectMake(a,b,80,80); 

#endif 
      aa= location.x; 
      bb= location.y; 
      [myAnimatedView initWithFrame:frame1]; 
      myAnimatedView.animationImages = myImages; 
      myAnimatedView.animationDuration = 0.25; 
      myAnimatedView.animationRepeatCount = 0; 

      [dustImage addSubview:myAnimatedView]; 


      CABasicAnimation *fadeOutAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; 
      [fadeOutAnimation setToValue:[NSNumber numberWithFloat:0.3]]; 
      fadeOutAnimation.fillMode = kCAFillModeForwards; 
      fadeOutAnimation.removedOnCompletion = NO; 

      //Set up scaling 
      CABasicAnimation *resizeAnimation = [CABasicAnimation animationWithKeyPath:@"bounds.size"]; 
      [resizeAnimation setToValue:[NSValue valueWithCGSize:CGSizeMake(0.0f, frame1.size.height * (1.0f /1.0))]]; 
      resizeAnimation.fillMode = kCAFillModeForwards; 
      resizeAnimation.removedOnCompletion = NO; 

      // Set up path movement 
      CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
      pathAnimation.calculationMode = kCAAnimationPaced; 
      pathAnimation.fillMode = kCAFillModeForwards; 
      pathAnimation.removedOnCompletion = NO; 

      CGPoint endPoint = CGPointMake(aa ,ver_Y); 
      CGMutablePathRef curvedPath = CGPathCreateMutable(); 
      CGPathMoveToPoint(curvedPath, NULL, aa, bb); 
      CGPathAddCurveToPoint(curvedPath, NULL, endPoint.x, bb,endPoint.x, bb,endPoint.x,endPoint.y); 
      pathAnimation.path = curvedPath; 
      CGPathRelease(curvedPath); 

      CAAnimationGroup *group = [CAAnimationGroup animation]; 
      group.fillMode = kCAFillModeForwards; 
      group.removedOnCompletion = NO; 
      [group setAnimations:[NSArray arrayWithObjects:fadeOutAnimation, pathAnimation, resizeAnimation, nil]]; 
      group.duration = 4.0f; 
      group.delegate = self; 
      [group setValue:myAnimatedView forKey:@"myAnimatedView"]; 

      [myAnimatedView.layer addAnimation:group forKey:@"savingAnimation"]; 
      [myAnimatedView startAnimating]; 


     } 
    } 
} 


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    if(!isAnimating) 
     [self blowingTheSparkles:touches]; 

} 

-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{ 
} 


-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 

    isAnimating=TRUE; 
    touchTimer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(sleeping) userInfo:nil repeats:NO]; 

} 

-(void)sleeping{ 

    NSLog(@"....Hiiii"); 
    isAnimating = FALSE; 
    [touchTimer invalidate]; 
    touchTimer = nil; 

} 

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 

    if(!isAnimating){ 
     [self blowingTheSparkles:touches]; 

     } 

} 



- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

    return NO; 
} 


- (void)didReceiveMemoryWarning { 

    [super didReceiveMemoryWarning]; 

} 

- (void)viewDidUnload { 

    [super viewDidUnload]; 

} 


- (void)dealloc { 

    [myAnimatedView release]; 

    [super dealloc]; 

} 

@end 
+0

Tous les journaux de l'accident? – willcodejavaforfood

Répondre

2

Vous ne semblez pas conservez correctement le NSTimer qui pourrait être votre problème ici.

Modifier à:

touchTimer = [[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(sleeping) userInfo:nil repeats:NO] retain]; 

Idéalement, vous devriez déclarer TouchTimer comme une propriété et synthétiser, mais essayez cette première.

Changement du sommeil pour libérer la minuterie:

-(void)sleeping{ 

    NSLog(@"....Hiiii"); 
    isAnimating = FALSE; 
    [touchTimer invalidate]; 
    [touchTimer release]; 
    touchTimer = nil; 
} 
Questions connexes