iPhoneで検索をタップしたときのように、全画面表示ではなくviewControllerのようなものを実装する方法を知っている人はいますか?ユーザーが上にスワイプすると、viewController(半分の高さ)が表示されるようにしたいと思います。セグエなし!! 古いビューコントローラーも同時に見せてほしいです。前もって感謝します
3 に答える
単純なものであれば、下部のすぐ下にを追加UIView
します。次に、[検索]などを押したときに、アニメーションブロックを使用してそれを上にアニメーション化します。UIViewController
UIView
- (IBAction)btnTouch:(id)sender
{
[UIView animateWithDuration:0.3
delay:0.0
options: UIViewAnimationCurveEaseInOut
animations:^{
//bring searchView up
_searchView.transform = CGAffineTransformMakeTranslation(0, -80);
}
completion:^(BOOL finished){
}
];
}
次に、完了したら、代わりにこの行で同じアニメーションブロックを使用して、ビューを元の位置に戻します。
_searchView.transform = CGAffineTransformMakeTranslation(0, 0);
プロジェクト全体にこのタイプの機能を追加します。ウィンドウにQRViewを追加して、ユーザーがプロジェクトの任意のビューからビューを上にスワイプできるようにします...
私のコードの例を参照してください。
UISwipeGestureRecognizer
次のように表示したい2番目のビューにを設定するだけです...
CATransition *animation = [CATransition animation];
[animation setDelegate:self];
[animation setType:kCATransitionFade];
[animation setDuration:0.5];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:
kCAMediaTimingFunctionEaseInEaseOut]];
[[self.view layer] addAnimation:animation forKey:kAnimationKey];
UISwipeGestureRecognizer *swipeGesture = [[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(addCustomBottomBar)] autorelease];
swipeGesture.numberOfTouchesRequired = 1;
swipeGesture.direction = (UISwipeGestureRecognizerDirectionDown);
[yourViewController.view addGestureRecognizer:swipeGesture];/// use your view name here, its depends on your requirement
UISwipeGestureRecognizer *swipeGestureTop = [[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(addCustomBottomBar)] autorelease];
swipeGestureTop.numberOfTouchesRequired = 1;
swipeGestureTop.direction = (UISwipeGestureRecognizerDirectionUp);
[yourViewController.view addGestureRecognizer:swipeGestureTop];
ビューを上にスワイプすると、この次のメソッドが呼び出されます。
BOOL
また、名前の付いた変数を1つ追加し、メソッドisViewPop
で設定NO
します。viewDidLoad:
-(void)addCustomBottomBar{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.window cache:YES];
if (isqrcodepop) {
isViewPop=NO;
yourViewController.view.frame=CGRectMake(0, 430, 320, 70);
}
else{
isViewPop=YES;
yourViewController.view.frame=CGRectMake(0, 210, 320, 270);
[self.view bringSubviewToFront:yourViewController.view];
}
[UIView commitAnimations];
}
この回答がお役に立てば幸いです...
バックグラウンドビューコントローラー[self presentViewController:vc animated:YES completion:nil];
を使用して、フロントビューコントローラーのフレームを画面の半分に設定することができます。このように、正面図の下半分は透明であるため、背景ビューコントローラは引き続き表示されます。