Je travaille sur une application iPhone en ce moment et je suis aux prises avec de l'animation. Fondamentalement, j'ai 109 cadres pour faire glisser sur un homme à l'écran, donc ce que je fais est à l'écoute des touches, et de calculer les cadres que je dois passer à.Animation iPhone basée sur le toucher
Cela fonctionne très bien, mais après un certain temps, je reçois une fuite de mémoire et l'application se bloque. Je charge toutes les images dans et Array au démarrage, et en utilisant un UIImageView
pour afficher les images. Les images sont chargées en utilisant imageWithContentsOfFile:
.
Quelle est la meilleure façon de faire cela?
Heres une partie du code source:
- (void)viewWillAppear:(BOOL)animated {
animationQueue = [[NSMutableArray alloc] initWithObjects:0];
imageArray = [[NSMutableArray alloc] initWithObjects:nil];
for(int i = 1;i<110;i++)
{
[imageArray addObject:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat: @"%i", i] ofType:@"png"]]];
}
[super viewWillAppear:animated];}
Voir Est-ce que le code de charge:
- (void)viewDidLoad {
animation = [[UIImageView alloc] initWithFrame: CGRectMake(0, 0, 480, 320)];
animation.contentMode = UIViewContentModeCenter;
[self.view addSubview:animation];
animation.image = [imageArray objectAtIndex:40];
[super viewDidLoad];}
Touches Handler:
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
// Enumerates through all touch objects
for (UITouch *touch in touches) {
CGPoint touch_point = [touch locationInView:self.view];
// calculate which frame to end on
int pos = ceil((touch_point.x/480) * 108);
[self redrawAnimation:pos];
}}
Redessiner Animation:
- (void)redrawAnimation:(int)end_frame {
animation.image = [imageArray objectAtIndex:end_frame];
}
L'application se bloque lorsque vous faites glisser votre doigt le long de l'écran plusieurs fois.
pouvez-vous poster un peu de votre code, et dites-nous le point, sur lequel votre crash de l'application? – schaechtele
L'application se bloque lorsque vous faites glisser votre doigt le long de l'écran plusieurs fois. – user310729