在这里的几个线程的帮助下,我创建了一个幻灯片,一旦我的视图加载就会开始 但是我试图稍微修改一下,我希望图像是随机的不按照数组中的顺序或以任何特定的顺序显示。这是我的密码
-(void)viewDidAppear:(BOOL)animated
{
NSArray *myImages=[NSArray arrayWithObjects:
[UIImage imageNamed:@"Pitt Bull"],
[UIImage imageNamed:@"German Sherpard"],
[UIImage imageNamed:@"Pincer"],
nil];
int indexed=arc4random()%[myImages count];
UIImage *image=[myImages objectAtIndex:indexed];
NSArray *imageAr=[NSArray arrayWithObject:image];
[NSTimer scheduledTimerWithTimeInterval:12.0
target:self
selector:@selector(viewDidAppear:)
userInfo:Nil
repeats:YES];
[self.kenView animageWithImages:imageAr
transitionDuration:12
loop:YES
isLandscape:YES];
}
然而它只能工作一次。它在开始时加载一个随机图片,但之后它会继续加载相同的图像。我可以看到,因为当视图“确实出现”时索引仅被赋予整数。我想知道是否有另一种方法也选择一个新的随机数,因为我没有使用按钮/动作,因为我看到许多其他成员在做。或者是实现这一目标的更好方法。
谢谢
答案 0 :(得分:0)
您可能需要NSTimer尝试此功能+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats
。
例如,在ViewDidLoad
中timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showImage:) userInfo:nil repeats:YES];
并声明一个函数
- (void)showImage:(NSTimer*)timer
{
// your code to generate random index and animate image transition
}
如果由于某种原因,你想要停止计时器
[timer invalidate];
为了避免计时器搞乱问题,在showDid中触发计时器,在ViewDidLoad中,执行[self showImage]
- (void)showImage
{
// your code to generate random index and animate image transition
// trigger the timer when the transition is finished
// You can leverage the method animateWithDuration:animations:completion:
// from UIView
[UIView animateWithDuration:12
animations:^(){
// image transition
}
completion:^(BOOL finished){
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showImage) userInfo:nil repeats:NO];
}]
}
这可以为你提供这个想法。
答案 1 :(得分:0)
考虑在启动时使用this method随机随机播放数组元素。