2015-06-28 3 views
0

У меня:Обновить изображение UIImageView в NSmutableArray?

Класс Piece inherit UIImageView;

- (void)setJumpAt:(int)frame { 
NSMutableArray *ret = [SkinConstants BallSelected]; 
NSString *name = [NSString stringWithFormat:@"balls-%d-%d", color - 1, [[ret objectAtIndex:frame] intValue]]; 
UIImage *a = [UIImage imageNamed:name]; 
NSLog(@"%d setJumpAt: %@", self.tag ,name); 
[self performSelectorOnMainThread:@selector(setImage:) withObject:a waitUntilDone:NO]; 
[self setNeedsDisplay]; 
[self setNeedsLayout];} 

Класс игрока содержит NSMutableArray of Piece;

Класс JumpThread содержит использование NSTimer для установки изображения Piece;

- (void) timer_Tick{ 
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
dispatch_async(queue, ^{ 
     [piece setJumpAt:frame++]; 
     [piece setNeedsDisplay]; 
     if (frame == len) 
      frame = 0; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
    }); 
});} 

Я бегу код нормально, но изображение Кусок не изменится в MainView, К сожалению, я не так хорошо на английском языке.

+0

, что в прошлом 'dispatch_async()' не диспетчерское ничего к основному потоку, и я не знаю, почему вы звоните 'setNeedsDisplay '* и *' setNeedsLayout'. В целом это кажется неудобным и подверженным ошибкам способом делать вещи - используя таймеры и отправляя их в очереди и т. Д. Рассматривали ли вы использование библиотеки, специально предназначенной для спрайтов и игр, таких как [SpriteKit] (https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Introduction/Introduction.html)? – JaredH

+0

Нет, я не использую SpriteKit, – user963861

ответ

0

UIImageView может анимировать изображения с массивом UIImages и подходящим animationDuration

//self is an UIImageView instance 
NSArray images = [...]; // your frames 
self.animationImages = images; 
self.animationDuration = 2.0f // 2.0s 
[self startAnimating]; 
Смежные вопросы