【问题标题】:Animate UISearchBar slide from top under nav bar从导航栏下方的顶部动画 UISearchBar 幻灯片
【发布时间】:2014-07-09 01:35:54
【问题描述】:

我想在我的UINavigationBar 底部添加一个UISearchBar,我想让它看起来像是栏的一部分。在下面的视频中,它显示了导航栏从顶部滑入视图的默认动画。我想在那之前在搜索栏中滑动,让它看起来像一个对象。

如何为 UISearchBar 重新创建此动画以显示和隐藏动画?并使其无缝动画化?

Animation

【问题讨论】:

  • 把你尝试过的代码提供给我们,我们会更容易处理

标签: ios objective-c uinavigationbar uisearchbar uianimation


【解决方案1】:

我认为您对导航栏使用自定义动画而不是默认动画。

我的测试代码如下。

#import "ViewController.h"

@interface ViewController ()
// Add a UISearchBar below navigation bar in Interface Builder 
@property (weak, nonatomic) IBOutlet UISearchBar *searchBar;

@end

@implementation ViewController{

    // this is flag for navigation bar status (shown or hidden)
    BOOL _isNaviBarHidden;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    _isNaviBarHidden = NO;

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


// trigger for show navigation bar. I don't know when you want to show. so I add a button in my test viewcontroller
- (IBAction)showNavibar:(id)sender {


    if(_isNaviBarHidden == NO){

        return;
    }


    [self setNavibarAndSearchBarHidden:NO];

}



- (IBAction)hideNavibar:(id)sender {

    if(_isNaviBarHidden == YES){

        return;
    }

    [self setNavibarAndSearchBarHidden:YES];
}


-(void)setNavibarAndSearchBarHidden:(BOOL)hidden{


    CGFloat yOffset = -130;

    CALayer *naviBarLayer = self.navigationController.navigationBar.layer;
    CALayer *searchBarLayer = self.searchBar.layer;


    [UIView animateWithDuration:0.3 animations:^{

        if(hidden){

            naviBarLayer.transform = CATransform3DMakeAffineTransform(CGAffineTransformMakeTranslation(0, yOffset));
            searchBarLayer.transform = CATransform3DMakeAffineTransform(CGAffineTransformMakeTranslation(0, yOffset));


        }else{

            naviBarLayer.transform = CATransform3DMakeAffineTransform(CGAffineTransformIdentity);
            searchBarLayer.transform = CATransform3DMakeAffineTransform(CGAffineTransformIdentity);

        }


    } completion:^(BOOL finished) {

        _isNaviBarHidden = hidden;

    }];


}

【讨论】:

    猜你喜欢
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    相关资源
    最近更新 更多