1

全て、

ビューが特定のポイントから画面にスライドする、一種の「スライドアップ」効果でサブビューを追加してアニメーション化するメソッドを必死に作成しようとしています。UIImageView を動作させることはできますが、それを UIPickerView に適用するのにかなりの時間を費やしています。何が起こるかというと、UIPickerView はその高さの約 1/4 だけ移動してアニメーション化します。UIImageView は実際には高さ 0 で始まり、画面上にスライドします。

これまでの私のコードは次のとおりです。


+ (void) slideupView:(UIView*) view duration:(CGFloat) duration completion:(void (^)(BOOL 
                                     finished)) completion {
    CGRect endBounds = view.bounds;
    CGRect startBounds = endBounds;

    startBounds.size.height = 0;

    view.bounds = startBounds;
    view.contentMode = UIViewContentModeTop;
    view.clipsToBounds = YES;
    view.layer.anchorPoint = CGPointMake(0.5, 1.0); 

    CGPoint pos = view.layer.position;
    pos.y += (endBounds.size.height / 2);
    view.layer.position = pos;

    [UIView animateWithDuration:duration delay:0.0        
                 options:UIViewAnimationOptionAllowUserInteraction
         animations:^{
             view.bounds = endBounds;
         }
         completion:completion];
}

私が読んだことから、変換を変更した場合、フレームアプローチは機能しないため、フレームの代わりに境界長方形を使用することをお勧めするアプローチのように思えます。

UIPickerView の高さを変更できないことも読んだので、それがこの問題の理由であるかどうか疑問に思っています。確かに、他の UIView サブクラスで試したことはありません。

何かご意見は?より良いアプローチはありますか?画面全体をカバーしたくないことを除いて、モーダルビューコントローラーのビューを表示するのと同様に、ビューを画面にアニメーション化したいだけです。キーボードが画面に表示されるときのように、スライドアップ効果が必要です。

ありがとう!ジャスティン

4

2 に答える 2

2

キーボードが表示されるようにビューを上にスライドさせたいだけの場合は、アニメーションでビューの y 座標を変更することで実行できます。

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0.0f,460.0f,320.0f,260.0f)];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:[self view] cache:YES];
[view setFrame:CGRectMake(0.0f,200.0f,320.0f,260.0f)];
[UIView commitAnimations];
于 2011-03-26T02:50:12.447 に答える
0

「境界」はビュー自体の内部座標系を指し、「フレーム」と「中心」は親の座標系でのビューの位置を指します。したがって、ビューを画面にスライドさせるには、フレームまたは中央のいずれかをアニメーション化する必要があります。

于 2011-03-26T03:10:59.293 に答える