最常見的向右滑動顯示菜單欄,其實就是兩個或多個圖層等級不一的視圖。向右滑動時,最上面的圖層根據(jù)滑動幅度來改變Frame(相對于父類復(fù)層)x值?,F(xiàn)在常見的例如QQ側(cè)滑顯示菜單欄:下面的圖層Frame.X值起初不是為0的,當(dāng)頂級圖層Frame.X的值為0時,監(jiān)測滑動幅度是否大于0(作者取值為80),通過滑動幅度改變上下圖層Frame.X的值。
廢話不多說了,上代碼吧:
//添加手勢
UIPanGestureRecognizer*panGesture = [[UIPanGestureRecognizer alloc] initWithTarget: self action: @selector(changeFrame:)];
[self.view addGestureRecognizer: panGesture];
#pragma側(cè)滑顯示菜單
-(void)changeFrame:(UIPanGestureRecognizer*)recognizer{
//獲取滑動幅度
CGPointtranslation = [recognizertranslationInView:self.view];//在某個view上面滑動幅度
float x = translation.x;//紀錄滑動幅度
NSLog(@"%f",x);
[UIViewanimateWithDuration:0.5delay:0options:UIViewAnimationOptionCurveEaseOutanimations:^{
if(x >=0) {//實現(xiàn)跟手勢改變位置
_contentView.frame=CGRectMake(x,0,SCREEN_WIDTH,SCREEN_HEIGHT);
_personMenuView.view.frame=CGRectMake(-SCREEN_WIDTH/3*2+ (x *0.9),0,SCREEN_WIDTH,SCREEN_HEIGHT);
}
}completion:nil];
if(recognizer.state==UIGestureRecognizerStateEnded) {
//當(dāng)手勢完成時,看最終幅度是否大于你預(yù)設(shè)的值,大于設(shè)置動畫(展示菜單),小于時回到原處(隱藏菜單圖層)
[UIViewanimateWithDuration:0.5delay:0options:UIViewAnimationOptionCurveEaseOutanimations:^{
if(x >80) {
_contentView.frame=CGRectMake(SCREEN_WIDTH/5*4+10,0,SCREEN_WIDTH,SCREEN_HEIGHT);
_personMenuView.view.frame=CGRectMake(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);
}else{
_contentView.frame=CGRectMake(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);
_personMenuView.view.frame=CGRectMake(-SCREEN_WIDTH/3*2,0,SCREEN_WIDTH,SCREEN_HEIGHT);
}
}completion:nil];
}
}
}
我寫的雖然很簡單,但是句句屬實,比起網(wǎng)絡(luò)上面的繁瑣好多了