改变随机图像

时间:2014-06-03 19:00:34

标签: objective-c

在这里的几个线程的帮助下,我创建了一个幻灯片,一旦我的视图加载就会开始 但是我试图稍微修改一下,我希望图像是随机的不按照数组中的顺序或以任何特定的顺序显示。这是我的密码

-(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];

}

然而它只能工作一次。它在开始时加载一个随机图片,但之后它会继续加载相同的图像。我可以看到,因为当视图“确实出现”时索引仅被赋予整数。我想知道是否有另一种方法也选择一个新的随机数,因为我没有使用按钮/动作,因为我看到许多其他成员在做。或者是实现这一目标的更好方法。

谢谢

2 个答案:

答案 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随机随机播放数组元素。