Проверяется, отображается ли UIPickerView или скрыт? Условия * если *? - PullRequest
3 голосов
/ 18 октября 2011

У меня небольшая проблема с анимацией UIPickerView. Я настроил анимацию, поэтому, когда я нажимаю кнопку, UIPickerView перемещается вверх, а после другого нажатия - вниз. Но я столкнулся с проблемой на , если . Я попытался установить новый параметр bool и установить его значение после каждой анимации, поэтому if просто проверял bool. Я не уверен, хорошо ли я это объяснил, но, возможно, вы поняли идею из кода. Но, к сожалению, это не работает ... Есть идеи?

- (void)viewDidLoad
{
    [super viewDidLoad];

    settings = [NSUserDefaults standardUserDefaults];
    [settings setBool:NO forKey:@"pickerShown"];
    [settings synchronize];
}


- (IBAction)showPicker:(id)sender {

    CGRect rect = countryPicker.frame;
    CGPoint origin = CGPointMake(0, 510); // Some off-screen y-offset here.

    rect.origin = origin;
    countryPicker.frame = rect;


    if ([settings boolForKey:@"pickerShown"] == YES) {


        // Perform transform to slide it off the screen.
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:0.5];
        countryPicker.transform = CGAffineTransformMakeTranslation(0, -0); // Offset.
        [UIView commitAnimations];
        [settings setBool:NO forKey:@"pickerShown"];
        [settings synchronize];

    } else if ([settings boolForKey:@"pickerShown"] == NO) {


        // Perform transform to slide it onto the screen.
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:0.5];
        countryPicker.transform = CGAffineTransformMakeTranslation(0, -266); // Offset.
        [UIView commitAnimations];
        [settings setBool:YES forKey:@"pickerShown"];
        [settings synchronize];

    }
}

EDIT:

Только что нашел решение ... Если кому-то интересно - вот оно:

ч. Файл:

.
.
.
{
BOOL pickerShown;
}
.
.
.

Файл .m:

- (void)viewDidLoad
{
    [super viewDidLoad];

    CGRect rect = countryPicker.frame;
    CGPoint origin = CGPointMake(0, 510); // Some off-screen y-offset here.

    rect.origin = origin;
    countryPicker.frame = rect;
pickerShown = NO;


}


- (IBAction)showPicker:(id)sender {


    if (pickerShown == NO) {


        // Perform transform to slide it onto the screen.
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:1];
        //[UIView setAnimationDidStopSelector:@selector(hidePicker)];
        countryPicker.transform = CGAffineTransformMakeTranslation(0, 0); // Offset.
        [UIView commitAnimations];
        [self performSelector:@selector(hidePicker) withObject:nil afterDelay:1];

    } else if (pickerShown == YES) {

        //countryPicker.hidden = NO;
        // Perform transform to slide it onto the screen.
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:1];
        countryPicker.transform = CGAffineTransformMakeTranslation(0, -266); // Offset.
        [UIView commitAnimations];
        countryPicker.hidden = NO;

    }
}

Ответы [ 4 ]

4 голосов
/ 23 октября 2011

Если видимость отображается на экране, свойство window будет отличным от нуля.

1 голос
/ 05 марта 2014

Вы можете проверить это с помощью:

self.countryPicker.superview

Если сборщик скрыт, то суперпредставление будет нулевым. В противном случае он будет содержать представление.

1 голос
/ 23 октября 2011

Только что нашел решение ... Если кому-то интересно - вот оно:

ч. Файл:

.
.
.
{
BOOL pickerShown;
}
.
.
.

Файл .m:

- (void)viewDidLoad
{
    [super viewDidLoad];

    CGRect rect = countryPicker.frame;
    CGPoint origin = CGPointMake(0, 510); // Some off-screen y-offset here.

    rect.origin = origin;
    countryPicker.frame = rect;
pickerShown = NO;


}


- (IBAction)showPicker:(id)sender {


    if (pickerShown == NO) {


        // Perform transform to slide it onto the screen.
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:1];
        //[UIView setAnimationDidStopSelector:@selector(hidePicker)];
        countryPicker.transform = CGAffineTransformMakeTranslation(0, 0); // Offset.
        [UIView commitAnimations];
        [self performSelector:@selector(hidePicker) withObject:nil afterDelay:1];

    } else if (pickerShown == YES) {

        //countryPicker.hidden = NO;
        // Perform transform to slide it onto the screen.
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:1];
        countryPicker.transform = CGAffineTransformMakeTranslation(0, -266); // Offset.
        [UIView commitAnimations];
        countryPicker.hidden = NO;

    }
}
0 голосов
/ 18 октября 2011

Если все, что вам нужно, это основной эффект отображения представления средства выбора, то для его повторного удаления существует более простой способ.

псевдокод:

//do any picker initialization here

if(!pickerIsShowing)
[self.view addSubview:yourPickerView];
else
 [self.yourPickerView removeFromSuperView];
...