5

UIView に要素があり、ビューの下部から常に 10 ピクセルでなければならないという制約があります。次に、このビューの高さをアニメーション化して、画面を下にスライドさせようとしています。制約によると、要素は常にビューの下部から 10 ピクセルの位置にある必要があります。これは、ビューを次のように追加すると当てはまります...

printView *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"printView"];
    [self addChildViewController:vc];
    vc.view.frame = CGRectMake(0, 60, vc.view.frame.size.width, HEIGHT);
    vc.view.layer.masksToBounds = FALSE;
    [vc.view.layer setShadowOffset:CGSizeMake(0.0, 5.0)];
    [vc.view.layer setShadowOpacity:0.8];
    vc.view.layer.shadowColor = [[UIColor blackColor] CGColor];
    vc.view.layer.shadowRadius = 8;
    vc.view.clipsToBounds = TRUE;
    [self.view insertSubview:vc.view aboveSubview:docWebView];

HEIGHT を好きなように変更でき、要素は常にビューの下部から 10 ピクセルです。高さをアニメーション化しようとすると問題が発生します

printView *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"printView"];
    [self addChildViewController:vc];
    vc.view.frame = CGRectMake(0, 60, vc.view.frame.size.width, 0);
    vc.view.layer.masksToBounds = FALSE;
    [vc.view.layer setShadowOffset:CGSizeMake(0.0, 5.0)];
    [vc.view.layer setShadowOpacity:0.8];
    vc.view.layer.shadowColor = [[UIColor blackColor] CGColor];
    vc.view.layer.shadowRadius = 8;
    vc.view.clipsToBounds = TRUE;
    [self.view insertSubview:vc.view aboveSubview:docWebView];
    [UIView animateWithDuration:5.0 animations:^{
        vc.view.frame = CGRectMake(0, 60, vc.view.frame.size.width, 200);
        [self.view setNeedsDisplay];
    }];

制約はもはや尊重されず、要素が常に下から 10 ピクセルの位置にビューがスライドする代わりに、要素がビューと一緒に移動しないため、要素が明らかにされているように見えます。これを十分に説明できていることを願っています。言い換えれば、地図が引き下げられるような効果を狙っているのですが、地図がすでに存在し、それを覆っている紙が引き離されているように見えます。ご協力いただきありがとうございます。

4

1 に答える 1

14

制約を使用する場合、フレームを設定するのではなく、制約を調整する必要があります。制約を最初に設定するときは、IBOutlet を高さの制約に作成し、アニメーション ブロックでその定数パラメーターをアニメーション化する必要があります。heightCon という高さの制約がある場合は、次のようにすることができます。

[UIView animateWithDuration:5.0 animations:^{
        self.heightCon.constant = 200
        [self.view layoutIfNeeded];
    }];

あなたの構造についてはわかりません.self.viewは代わりにvc.viewでなければならないかもしれません.

編集後:

これは高さの制約をアニメートする方法ですが、目的の外観を実現するためにそれを実行したいかどうかはわかりません。あなたの最後の段落をどうすればいいのかよくわかりません。マップが引き下げられる効果を求める場合は、下部の制約をアニメーション化するか削除する必要があるようです。

于 2013-07-13T04:05:04.770 に答える