1

1秒間隔で発生する2つのアニメーション画像を含む画像ビューがあります。画像ビューにこれら2つの画像のいずれかが表示されているときに、いくつかのメソッドを実行したい

私はすでにやってみました:

if(self.imageViewThatPerformsAnimation.image == [UIImage imageNamed: @"someImage"])
    [self doSomeMethod];

しかし、これを試して実行すると[self doSomeMethod];、画像ビューにその1つの画像が表示されているときだけでなく、常に実行されました。

ブール値を1秒ごとに変更するタイマーを作成することを考えています。

if (booleanValue==YES)
    [self doSomeMethod]

もっと良い方法があるかもしれないと私が感じているだけです。

4

1 に答える 1

1

を使用したい場合は、次のNSTimerようになります。

@interface MyViewController ()
{
    NSTimer *_timer;
    NSArray *_images;
    NSInteger _currentImageIndex;
}
@end

@implementation MyViewController

@synthesize imageview = _imageview;

- (void)viewDidLoad
{
    [super viewDidLoad];

    _images = [NSArray arrayWithObjects:
               [UIImage imageNamed:@"imgres-1.jpg"], 
               [UIImage imageNamed:@"imgres-2.jpg"], 
               [UIImage imageNamed:@"imgres-3.jpg"], 
               [UIImage imageNamed:@"imgres-4.jpg"], 
               nil];

    _currentImageIndex = -1;
    [self changeImage];

    // Do any additional setup after loading the view.
}

- (void)changeImage
{
    _currentImageIndex++;

    if (_currentImageIndex >= [_images count])
        _currentImageIndex = 0;

    self.imageview.image = [_images objectAtIndex:_currentImageIndex];

    if (_currentImageIndex == 0)
        [self doSomething];
}

- (void)startTimer
{
    if (_timer) {
        [_timer invalidate];
        _timer = nil;
    }

    _timer = [NSTimer timerWithTimeInterval:1.0
                                     target:self 
                                   selector:@selector(changeImage)
                                   userInfo:nil
                                    repeats:YES];

    [[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSDefaultRunLoopMode];
}

- (void)stopTimer
{
    [_timer invalidate];
    _timer = nil;
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    [self startTimer];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];

    [self stopTimer];
}
于 2012-07-15T20:01:04.753 に答える