2014-07-09 1 views
0

하단에 UISearchBar을 추가하고 바의 일부로 보이게하고 싶습니다. 아래 비디오에는 위에서 본 슬라이딩 내비게이션 막대의 기본 애니메이션이 표시됩니다. 그 전에 검색 막대를 슬라이드하여 하나의 객체처럼 보이게하고 싶습니다.상단에서 UISearchBar 슬라이드를 이동 막대 아래에 애니메이션으로 지정

표시 및 숨기기 애니메이션의 경우 UISearchBar에 대해이 애니메이션을 어떻게 다시 만들 수 있습니까? 그리고 원활하게 움직이게 만드시겠습니까?

Animation

+0

지금까지 시도한 것에 대한 코드를 제공하면 쉽게 처리 할 수 ​​있습니다. –

답변

0

난 당신이 애니메이션을 기본하지 탐색 모음에 대한 사용자 지정 애니메이션을 사용 생각합니다.

내 테스트 코드는 다음과 같습니다.

#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; 

    }]; 


} 
관련 문제