0

フレームを目的の位置にスライドさせるアニメーションをアプリで作成しようとしています。フレームには、他のボタンやテキストも表示されます。

ウィンドウの最下部から開始するため、これにアクションシートを使用できませんでした。私が作成したいものは、下の写真に示されています。

ここに画像の説明を入力

アニメーション化するフレームは、キャプチャ モードのフレームです: テキスト。

tabView のボタンをクリックして、このフレームをタブビューの上部から上にスライドさせます。ボタンをもう一度クリックすると、フレームが消えます。

これまでのところ、私のコードは次のようになります

-(IBAction)setting


{

    NSLog(@"finalShare Button");

    UIView *tempView;

    CGRect tmpFrame;

    tempView = [[[UIView alloc] initWithFrame:CGRectMake(0, 490, 320, 90)] 

                autorelease];

    [tempView setBackgroundColor:[UIColor clearColor]];

    [tempView setAlpha:.87];

    tempView.hidden = YES;

    [self.view addSubview:tempView];



    tmpFrame = tempView.frame;

    [UIView beginAnimations:nil context:NULL];

    [UIView setAnimationDuration:.75];

    tmpFrame.origin.y=390;

    self.view.frame=tmpFrame;

    [UIView commitAnimations];


}

ここで直面している問題は、フレームを移動するようにアニメーション化すると、メイン ビューがそれに沿って移動することです。これは私がやりたくないことです。

iPhoneプログラミングは初めてです。これを修正する方法を教えてください。または、それを行うためのより良い方法は何でしょうか。

ありがとう

4

2 に答える 2

1

ビューを非表示にする必要はありません。フレームの y 原点を 480 に設定した後、サブビューとして追加するだけです。また、古い UIView アニメーション メソッドを使用しないでください。ブロックを使用します。

0 の y 原点で始まるビューの例を次に示します。これは、その高さに等しい負の y に配置され、サブビューとして追加され、画面の下から上に来るキーボードに合わせてアニメーション化されます。

// add to view while completely off-screen
CGRect unlockViewFrame = unlockView.frame;
unlockViewFrame.origin.y = -unlockViewFrame.size.height;
unlockView.frame = unlockViewFrame;

[self.view addSubview:unlockView];

unlockViewFrame.origin.y = 0.;
[UIView animateWithDuration:0.3 animations:^{
    unlockView.frame = unlockViewFrame;
}];

完了ブロックを使用してビューを削除する、逆の同じことを次に示します。

unlockViewFrame.origin.y = -unlockViewFrame.size.height;

[UIView animateWithDuration:0.3 animations:^{
    view.frame = unlockViewFrame;
} completion:^(BOOL completion) {
    [view removeFromSuperview];
}];

私が気付いたもう 1 つのことは、コードですべてを実行していることです。Interface Builderで行うことを検討してください。頭のいい人が、書いていないコードにバグがあるはずがない、と言っていたのですが、彼は正しかったです。IB でビューを作成し、必要なときにコードでインスタンス化するのは簡単です。

NSArray* nibViews;
nibViews = [[NSBundle mainBundle] loadNibNamed:@"UnlockView" owner:self options:nil];
UnlockView *unlockView = [nibViews objectAtIndex:0];

また、ARC の使用を検討してください。もうオートリリースはありません!

于 2012-10-10T05:15:15.857 に答える
0

tempView ではなく、メイン ビューのリセット フレーム

 [UIView beginAnimations:nil context:NULL];

[UIView setAnimationDuration:.75];

tmpFrame.origin.y=390;

tempView.frame=tmpFrame; //it should be tempView not self.view ie main view

[UIView commitAnimations];
于 2012-10-10T05:12:58.953 に答える