このアニメーションを自分の中に入れてviewController
、メニューを縮小して下にスライドさせます。
-(void)dismissMenuWithAnimation
{
CGRect originalFrame = self.view.frame;
[UIView animateWithDuration:2
animations:^{
self.view.frame = CGRectMake(originalFrame.origin.x,originalFrame.origin.y+originalFrame.size.height,originalFrame.size.width,10);
}
completion:^(BOOL finished){
[self.view removeFromSuperview];
self.view.frame = originalFrame;
}];
}
同じ中viewController
で、私はオーバーライドしていますviewWillLayoutSubviews
:
-(void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
CGRect viewBounds = self.view.bounds;
self.subView1.frame = CGRectMake(self.menuItemMidPosition,viewBounds.size.height-SUBVIEW1_HEIGHT,SUBVIEW1_WIDTH,SUBVIEW1_HEIGHT);
}
このメソッドでフレームが設定されているサブビューがいくつかありviewWillLayoutSubviews
ます。フレームがまだ正しくないため、viewDidLoadで設定しません。
問題は、メニューを閉じると、アニメーションブロックが最初に呼び出され、どういうわけかself.view.frameがすぐに高さ10(縮小されたフレーム)に設定されることです。viewWillLayoutSubviewsに達すると、境界の高さは10になります。これにより、他のサブビューが正しく表示されなくなります。
これはかなりばかげているように見えますが、これを解決する方法がわかりません。誰かが助けることができますか?ありがとう。