0

ウィンドウの下部からビューをロードするためにアニメーションを使用したかったのですが、これは presentmodalViewController を介して実行できることを知っていますが、ウィンドウの半分にビューをロードしたいだけなので、アプリの要件では有効ではありません。だから私はアニメーションを使用し、私がしたことを見てみましょう

-(void) displayPicker
    {
        UIButton *done = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [done setFrame:CGRectMake(197, 199, 103, 37)];
        [done setBackgroundImage:[UIImage imageNamed:@"button_0.png"] forState:UIControlStateNormal];
        [done setTitle:@"Done" forState:UIControlStateNormal];
        [done setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [done addTarget:self action:@selector(dismissView) forControlEvents:UIControlEventTouchUpInside];

        [pickerDisplayView addSubview:datePicker];
        [pickerDisplayView addSubview:done];

    //animating here

        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:0.5];
        pickerDisplayView = [[UIView alloc]initWithFrame:CGRectMake(0, 185, 320, 275)];
        [self.view addSubview:pickerDisplayView];
        [UIView commitAnimations];

    }

pickerDisplayView というビューには Picker と Button という 2 つのコンポーネントがありますが、問題は Picker が正しく動作しておらず、どちらのビュー (pickerDisplayView) もスムーズに読み込まれていないことです。


@マット:私はあなたの指示に従い、あなたがアドバイスしたように、私がしたことは次のとおりです

-(void) animationIn
{
    CGPoint p = {x:0,y:185};

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.5];
    //pickerDisplayView = [[UIView alloc]initWithFrame:CGRectMake(0, 185, 320, 275)];
    [pickerDisplayView setCenter:p];
    [UIView commitAnimations];

}

しかし、問題は、ビューがウィンドウの上部にあり、正確な 185 の y 軸に達していないことです。これらの座標は IB から取得しました。助けてください先生

4

2 に答える 2

0

する必要がinitありaddSubviewますbeginAnimations:init pickerDisplayView上部がスーパービューの下部と一直線になるように配置する場合。アニメーションが上にスライドしpickerDisplayViewます。理想的には、nib またはloadViewメソッドでビューを作成する必要があります。(「loadView」よりもペン先を使用することを強くお勧めします)。

これを loadView で実行します (または nib に移動します):

CGRect offScreenFrame = ?????; //Figure this out from self.view
self.pickerDisplayView = [[UIView alloc]initWithFrame:offScreenFrame];
[self.view addSubview:self.pickerDisplayView];

これはアニメーションです:

[UIView beginAnimations:nil context:NULL];
self.pickerDisplayView.frame = CGRectMake(0, 185, 320, 275);
//[UIView setAnimationDuration:0.5]; //this line is probably not needed
[UIView commitAnimations];

また、フレームで「マジック ナンバー」を使用しないことをお勧めします。pickerDisplayView代わりに、スーパービュー フレームからフレームを派生させることができます。「マジック」ナンバーを使用する場合は、必ず何らかの方法で説明してください (つまり、適切な名前の変数またはコメントに割り当てます)。

于 2010-11-12T14:03:42.217 に答える
0

ビューをオフスクリーンに追加してから、アニメーション化する必要があります。

// In your viewDidLoad or wherever you initialize the view.
pickerDisplayView = [[UIView alloc]initWithFrame:offscreenRect];

[self.view addSubview:pickerDisplayView];
[self performSelector:@selector(animateIn) withObject:nil afterDelay:0.25];

// Declare animateIn
- (void)animateIn
{
    UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.5];
    [pickerDisplayView setCenter:onscreenPosition];
    [UIView commitAnimations];
}

offscreenRectは、ビューを開始するサイズと位置の CGRect です。onscreenPositionアニメーションを終了させたい位置の CGPoint です。アニメーション中にビューのサイズを変更したくないため、ビューの中心をアニメーション化するだけで十分です。

-performSelector:withObject:afterDelayまた、アニメーションが確実に起動するように、で呼び出される別のメソッドにアニメーションを配置しました。アニメーション化するビューを追加した同じ実行ループでアニメーションを開始すると、アニメーションが実行されないことがあります。

于 2010-11-12T14:14:14.300 に答える