Создание образа прошивки на UIButton?

Я пытаюсь создать игру на запоминание, но в какой-то момент мне нужно, чтобы изображения на UIbutton мигали. В течение x секунд я хочу, чтобы они были видны, а в течение x секунд я хочу, чтобы они были скрыты. Я застрял и просто хотел бы, чтобы кто-нибудь дал мне алгоритм, который будет работать. Спасибо.


person Andre V    schedule 08.02.2013    source источник
comment
см. stackoverflow.com/questions/2823635/   -  person Rachel Gallen    schedule 08.02.2013


Ответы (2)


Базовый подход состоит в том, чтобы открывать и закрывать представление, устанавливая альфа-канал.

UIView *view = imageView; // Or whatever
NSTimeInterval x = 2.0; // Or whatever

double delayInSeconds = x;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));

dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ // Wait for x seconds to hide
    view.alpha = 0.0; // HIDE

    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ // Wait for x seconds to show
        view.alpha = 1.0; // SHOW
    });
});

Немного более визуально привлекательный подход - постепенно увеличивать и уменьшать изображение.

UIView *view = imageView; // Or whatever
NSTimeInterval x = 2.0; // Or whatever
NSTimeInterval fadeInterval = 0.5; // Or whatever

double delayInSeconds = x;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));

dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ // Wait for x seconds to hide
    [UIView animateWithDuration:fadeInterval animations:^{
        view.alpha = 0.0; // HIDE
    } completion:^(BOOL finished) {
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ // Wait for x seconds to show
            [UIView animateWithDuration:fadeInterval animations:^{
                view.alpha = 1.0; // SHOW
            }];
        });
    }];
});

См. dispatch_after(3), _ 4_ и _ 5_.


ОБНОВЛЕНИЕ

В ПОРЯДКЕ. на основе вашего комментария я сделаю все немного проще.

Шаг 1. Заставьте изображение исчезнуть. Это можно сделать, установив альфа (прозрачность) на 0, установив скрытый на YES или удалив представление из его супервизора. Для простого эффекта на этот раз я установлю для скрытого значение ДА.

view.hidden = YES;

Шаг 2. Заставьте изображение исчезнуть через заданное время. Есть удивительное количество способов сделать это. Я буду придерживаться метода dispatch_after (), но сделаю его более понятным. Этот шаг состоит из двух частей. Часть а) устанавливает время, которое вы хотите, чтобы вид был скрыт. Часть б) - это скрыть вид.

// Part a) Set the time you want the view to disappear.
double howLongBeforeDisappearing = 2.0; // seconds
dispatch_time_t timeToDisappear = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(howLongBeforeDisappearing * NSEC_PER_SEC));

// Part b) Hide the view
dispatch_after(timeToDisappear, dispatch_get_main_queue(), ^{
    view.hidden = YES;
});

Вокруг важного кода много чего, но сосредоточьтесь на howLongBeforeDisappearing = 2.0 и view.hidden = YES. Это говорит о том, что через 2 секунды установите для view.hidden значение ДА.

Наконец, нам нужно отменить это, чтобы все снова появилось. Для этого мы делаем то же самое, за исключением того, что на этот раз мы устанавливаем для view.hidden значение NO. Имейте в виду, что нам нужно добавить время ожидания исчезновения представления при установке времени для повторного появления.

// Part c) Set the time you want the view to reappear.
double howLongBeforeReappearing = howLongBeforeDisappearing + 2.0; // seconds
dispatch_time_t timeToReappear = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(howLongBeforeReappearing * NSEC_PER_SEC));

// Part d) Show the view
dispatch_after(timeToReappear, dispatch_get_main_queue(), ^{
    view.hidden = NO;
});

Сложив все это вместе, мы получим последний кусок кода.

// Part a) Set the time you want the view to disappear.
double howLongBeforeDisappearing = 2.0; // seconds
dispatch_time_t timeToDisappear = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(howLongBeforeDisappearing * NSEC_PER_SEC));

// Part b) Hide the view
dispatch_after(timeToDisappear, dispatch_get_main_queue(), ^{
    view.hidden = YES;
});

// Part c) Set the time you want the view to reappear.
double howLongBeforeReappearing = howLongBeforeDisappearing + 2.0; // seconds
dispatch_time_t timeToReappear = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(howLongBeforeReappearing * NSEC_PER_SEC));

// Part d) Show the view
dispatch_after(timeToReappear, dispatch_get_main_queue(), ^{
    view.hidden = NO;
});
person Jeffery Thomas    schedule 08.02.2013
comment
Я новичок в цели c и не очень понимаю этого, думал о чем-то более простом, что я тоже не смогу понять. Я не хочу просто вводить алгоритмы, которых я не понимаю. Я ценю ваш ответ, и, возможно, когда я наберусь опыта, я вернусь и проверю его. - person Andre V; 08.02.2013
comment
@ Thankmelater23 Я обновил пример, дайте мне знать, поможет ли это. - person Jeffery Thomas; 09.02.2013

Вот как я заставил кнопки мигать

- (void) blinkAll {[NSTimer scheduleTimerWithTimeInterval: .5 target: self selector: @selector (hideBoxes) userInfo: nil Repeats: NO];

[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(showBoxesCurrent) userInfo:nil repeats:NO];

[NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(hideBoxes) userInfo:nil repeats:NO];

[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(showBoxesCurrent) userInfo:nil repeats:NO];

[NSTimer scheduledTimerWithTimeInterval:2.5 target:self selector:@selector(hideBoxes) userInfo:nil repeats:NO];

[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(showBoxesCurrent) userInfo:nil repeats:NO];

[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(hideBoxes) userInfo:nil repeats:NO];

[NSTimer scheduledTimerWithTimeInterval:3.5 target:self selector:@selector(enableGamePlay) userInfo:nil repeats:NO];

}

Функции showBoxesCurrent и hideBoxes - это базовые циклы, которые получают все массивы кнопок и устанавливают их как скрытые или не скрытые, которые активируются функцией NSTimer.

person Andre V    schedule 09.02.2013