ВсеIOS - Использование NSTimer, обновление UIImageView Просто в первый раз
Когда я с помощью NSTimer, чтобы завершить свою задачу, я встречаю некоторые проблемы. Мне нужна помощь, спасибо.
Вот проблема.
Когда я использую NSTimer для отображения анимации в UIImageView. но UIImageView просто обновляется в первый раз, когда я запускаю код в своих iphone4, используя xcode. когда UIImageView появляется снова, он не обновляет содержимое изображения. Я проверил журнал, таймер вызывается каждый раз, и код закрывается, когда он запускается.
NSTimer:
if (networkStatusTimer == nil) {
networkStatusTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(getcurrentNetworkDelayStatus) userInfo:nil repeats:YES];
networkStatusImageView Initialization часть:
- (UIImageView *)networkStatusImageView
{
if (nil == _networkStatusImageView) {
CGRect rect = CGRectMake(246, 12, 24, 8);
_networkStatusImageView = [[UIImageView alloc]initWithFrame:rect];
_networkStatusImageView.contentMode = UIViewContentModeRight | UIViewContentModeTop;
UIImageView *img1 = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"talk_icon_redsolid_1X"]];
UIImageView *img2 = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"talk_icon_redhollow_1x"]];
UIImageView *img3 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"talk_icon_whitehollow_1x"]];
img2.left = img1.right;
img3.left = img2.right;
[_networkStatusImageView setNeedsDisplay];
[_networkStatusImageView addSubview:img1];
[_networkStatusImageView addSubview:img2];
[_networkStatusImageView addSubview:img3];
}
return _networkStatusImageView;
}
Селектор Код:
- (void) getcurrentNetworkDelayStatus {
currentNetworkDelayTime = 0;
[_networkStatusImageView removeAllSubviews];
UIImageView *img1 = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"talk_icon_redhollow_1x"]];
UIImageView *img2 = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"talk_icon_redhollow_1x"]];
UIImageView *img3 = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"talk_icon_redhollow_1x"]];
dispatch_async(dispatch_get_main_queue(), ^{
if (currentNetworkDelayTime == 0) {
if (currentISRed) {
img1.image = [UIImage imageNamed:@"talk_icon_redhollow_1x"];
img2.image = [UIImage imageNamed:@"talk_icon_redhollow_1x"];
img3.image = [UIImage imageNamed:@"talk_icon_redhollow_1x"];
} else { // 显示红色实心
img1.image = [UIImage imageNamed:@"talk_icon_redsolid_1X"];
img2.image = [UIImage imageNamed:@"talk_icon_redsolid_1X"];
img3.image = [UIImage imageNamed:@"talk_icon_redsolid_1X"];
}
currentISRed = !currentISRed;
} else if(currentNetworkDelayTime > 0 && currentNetworkDelayTime <= 500){
img1 = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"talk_icon_greensolid1X"]];
img2 = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"talk_icon_greensolid1X"]];
img3 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"talk_icon_greensolid1X"]];
} else if(currentNetworkDelayTime > 500 && currentNetworkDelayTime <= 3000){
img1 = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"talk_icon_greensolid1X"]];
img2 = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"talk_icon_greensolid1X"]];
img3 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"talk_icon_greenhollow_1x"]];
} else if (currentNetworkDelayTime > 3000){
img1 = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"talk_icon_greensolid1X"]];
img2 = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"talk_icon_greenhollow_1x"]];
img3 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"talk_icon_greenhollow_1x"]];
}
img2.left = img1.right;
img3.left = img2.right;
[img1 setNeedsDisplay];
[img2 setNeedsDisplay];
[img3 setNeedsDisplay];
[_networkStatusImageView setNeedsDisplay];
[_networkStatusImageView addSubview:img1];
[_networkStatusImageView addSubview:img2];
[_networkStatusImageView addSubview:img3];
});
}
setNeedsDisplay звонки не нужны –
Вероятно, ваш _networkStatusImageView равен нулю –
lastly: почему dispatch_async? –