2010-05-28 5 views
7

Le code suivant anime le mouvement, même si je n'ai pas utilisé beginAnimations:context. Comment puis-je le faire bouger sans l'animer? Ceci est un nouveau projet d'affichage iphone, et ce sont les seules mises à jour.Désactiver l'animation lors du déplacement de CALayers

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    sublayer = [CALayer new]; 
    sublayer.backgroundColor = [[UIColor redColor] CGColor]; 
    sublayer.frame = CGRectMake(0, 0, 100, 100); 

    [self.view.layer addSublayer:sublayer]; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    sublayer.position = [[touches anyObject] locationInView:self.view]; 
} 

Répondre

14

La façon la plus simple de le faire est de passer outre la durée de l'animation en mettant le code de position dans une transaction:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    [CATransaction begin]; 
    [CATransaction setAnimationDuration:0]; 
    sublayer.position = [[touches anyObject] locationInView:self.view]; 
    [CATransaction commit]; 
} 
+1

ou 'setDisableActions: YES – Sulthan

4

Plus façon la plus simple:

sublayer.position = [[touches anyObject] locationInView:self.view];
[sublayer removeAnimationForKey:@"position"];

Questions connexes