0

UIPicker でアニメーションを実行しようとしています。アプリが非表示で実行され、ボタンが押されるとボタンからスライドして表示され、ボタンをもう一度タップするとスライドします。まあ、私のコードはそれを行いますが、一度だけです。します:

最初のクリック -> ピッカーを表示、isPickerHidden = NO

2 回目のクリック -> ピッカーを非表示、isPickerHidden = YES

3 回目のクリック -> 何もしませんが、isPickerHidden = NO を返します。viewDidLoad 宣言の場所は;

4回目のクリックと同じように、何もしませんが、正しいBOOL値を返します。

isPickerHidden = YES;

[self.picker setHidden:isPickerHidden];

if(isPickerHidden == NO){
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.6];
        CGRect frame = self.picker.frame;
        [self.picker setFrame:CGRectOffset(frame, self.picker.frame.origin.x, self.picker.frame.origin.y)];
        [UIView commitAnimations];
        isPickerHidden = YES;
        NSLog(@"hidden yes");
    }else if(isPickerHidden == YES) {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.6];
        CGAffineTransform transfrom = CGAffineTransformMakeTranslation(0, -200);
        self.picker.transform = transfrom;
        [self.picker setHidden:NO];
        [UIView commitAnimations];
        NSLog(@"hidden no ");
        isPickerHidden = NO;
    }

私が直面している問題と、何が欠けているのかを知りたいです。ありがとう

4

2 に答える 2

0

返信してくれた NS ブロに感謝しますが、CGRectMake を使用した元のポイントからポイントをオフセットする代わりに、別のアプローチを取りました。これを行いました。

if(isPickerHidden == NO) {
        CGRect frame = self.picker.frame;
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationDuration:0.6];

        [self.picker setFrame:CGRectMake(frame.origin.x, frame.origin.y + 216, frame.size.width, frame.size.height)];
        [UIView commitAnimations];
        isPickerHidden = YES;

    } else if (isPickerHidden == YES) {
        CGRect frame = self.picker.frame;
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationDuration:0.6];

        [self.picker setFrame:CGRectMake(frame.origin.x, frame.origin.y - 216, frame.size.width, frame.size.height)];
        [UIView commitAnimations];
        isPickerHidden = NO;

    }

スライドダウンとスライドアップの両方が同じ方法でうまくアニメーション化されています。しかし、今問題は、アプリのロード時に UIPicker を非表示にしたかったため、viewDidLoad で [self.picker setHidden:YES]; を使用しようとしたことです。しかし、CGRect を使用して作成したフレームは、ボタンを押しても表示されず、アルファを試してみました。

私はまた、if-elseステートメントの本体にsetHiddenをyesに入れ、それらの値に関して知るようにしました。今何が欠けているのか知りたいです。

于 2013-08-08T13:07:11.327 に答える