按下按钮后,我需要在两张(或者稍后更多)的图片之间切换特定次数,然后等待一两秒钟进行更改。当任何时候按下停止按钮时,切换应该停止。我的代码现在看起来像这样
IBOutlet UIImageView *exerciseView;
- (void) repetitionCycle {
stopButtonPressed = NO;
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
for (NSInteger counter = kRepetitions; counter >=0; counter--) {
exerciseView.image = [UIImage imageNamed:@"blue.jpg"];
[NSThread sleepForTimeInterval:kSleepDuration];
if (stopButtonPressed) {break;}
image = [UIImage imageNamed:kExerciseEndingPosition];
exerciseView.image = [UIImage imageNamed:@"image1.jpg"];
[NSThread sleepForTimeInterval:kSleepDuration];
if (stopButtonPressed) {break;}
}
self.stopRepetitionCycle;
[pool release];
}
exerciseView是 除了其他东西,在stopRepetitionCycle我只是将stopButtonPressed设置为YES,所以它在第一次完成“for”后停止。 它确实倒计时,它会在一个周期后停止,但它不会改变图片。
在摆弄时,我通过IB设置了初始图片,所以它最终显示了任何东西..有趣的部分,当我在正确的时刻点击停止按钮时,显示第二张图片。所以我猜我每次图像切换时都需要手动设置视图。但
[self.exerciseView addSubview:image];
给我错误
Incompatible Objective-C types "struct UIImage *", expected "struct UIView *" when passing argument 1 of "addSubview:" from distinct Objective-C type
另外
[self.exerciseView.image addSubview:image];
不能完成这项工作并给我一个
UIImage may not respond to addSubview
知道我必须在这做什么吗?
非常感谢!
答案 0 :(得分:1)
... uuhm
你对[NSThread sleep...]
的使用困惑我...
实际上:如果你是一个辅助线程(意思是,不是主线程),那么你正在做一些不允许的事情,即trying to access the UI from a secondary thread。
这可以解释你所看到的奇怪行为。
另一方面,如果这是主线程,调用sleep...
可能不是一个好主意,因为这样你将完全冻结UI,并且你不可能拦截按钮上的点击。 ..
无论如何,我建议使用NSTimer
以一定的时间间隔从一个图像移动到下一个图像。当隐藏停止按钮时,您只需取消定时器,幻灯片将结束。很干净。
关于您对图片的错误消息,事实是UIImage
不是UIView
,因此您无法将其添加为子视图,但这不是不起作用的这里...
答案 1 :(得分:0)
在循环内更新UI几乎可以保证失败。您最有可能使用NSTimer以给定的间隔交换图像。
此外,[self.exerciseView addSubview:image]失败了,因为你传递的是UIImage而不是UIView。使用你的UIImage创建一个UIImageView(它是UIView的子类)并传递它。
答案 2 :(得分:0)
addSubview方法仅用于添加UIViews
。您不能将它与UIImage类一起使用。一般语法是:
[(UIView) addSubview:(UIView*)];
替换
[self.exerciseView addSubview:image];
带
self.exerciseView.image = image;
出于同样的原因
[self.exerciseView.image addSubview:image];
也不起作用。
答案 3 :(得分:0)
使用UIImageView。它内置了对此的支持。
imageView.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"blue.jpg"], [UIImage imageNamed:@"image1.jpg"], nil];
imageView.animationDuration = kSleepDuration * [imageView.animationImages count];
将此功能连接到开始按钮
- (IBAction) startAnimation {
[imageView startAnimating];
}
这是停止按钮
- (IBAction) stopAnimation {
[imageView stopAnimating];
}