ios 사 이 드 서랍 효과 구현 코드

7165 단어 ios서랍.
본 논문 의 사례 는 ios 사 이 드 서랍 효과 의 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
효과 도 는 다음 과 같다

코드 실현 및 사고방식 아래 분석:
코드 생 성 내 비게 이 션 컨트롤 러
Appdelegate.m 중

#import "AppDelegate.h"
#import "ViewController.h"
@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
 ViewController * vc = [[ViewController alloc] init];
//                
 UINavigationController * nav = [[UINavigationController alloc] initWithRootViewController:vc];
 self.window.rootViewController = nav;
 [self.window makeKeyAndVisible];
 return YES;
}
viewcontroller.m 중

//
// ViewController.m
// PBSliedMenu
//
// Created by     on 16/4/21.
// Copyright © 2016     . All rights reserved.
//

#import "ViewController.h"
#define kScreenH [UIScreen mainScreen].bounds.size.height
#define kScreenW [UIScreen mainScreen].bounds.size.width
#define kNavW 64
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>

@property (nonatomic, strong) UITableView *tableView;
/**           */
@property (nonatomic, assign) BOOL openSlide;
/**      */
@property (nonatomic, strong) UIBarButtonItem *btnLeft;

@end
왼쪽 view 가 열 렸 는 지 닫 혔 는 지 bool 값 으로 기록 합 니 다.클릭 할 때마다 tableView 상 태 를 기록 하 는 값 을 변경 합 니 다.
사 이 드 바 단 추 를 속성 으로 저장 합 니 다.왼쪽 tableView 가 팝 업 을 하거나 애니메이션 을 실행 하 는 과정 에서 사용 하지 않 습 니 다.

@implementation ViewController

#pragma mark -     cell    
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

 UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
 NSLog(@"%@",cell.textLabel.text);
 //  cell       
 [tableView deselectRowAtIndexPath:indexPath animated:YES];
}


#pragma mark - tableView   
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
 
 return 20;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
 static NSString * ID = @"cell";
 UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:ID forIndexPath:indexPath];
 cell.textLabel.text = [NSString stringWithFormat:@"  %zd",indexPath.row];
 cell.backgroundColor = [UIColor orangeColor];
 return cell;
}

- (void)viewDidLoad {
 
 [super viewDidLoad];
 self.view.backgroundColor = [UIColor whiteColor];
 [self initLeftBarButton];
 //  cell
 [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
}
메모:cell 을 등록 하 는 동시에 self.tableView 를 호출 하면 게 으 른 로 딩 을 호출 합 니 다.이때 tableView 가 만 들 어 졌 습 니 다.먼저 만들어 야 합 니 다.그렇지 않 으 면 tableView 가 처음 팝 업 할 때 화면(0,0)점 에서 팝 업 됩 니 다.전체 tableView 가 왼쪽 에서 팝 업 되 는 것 이 아 닙 니 다.

#pragma mark -        
-(void)initLeftBarButton{
 
 UIButton * btnLeft = [[UIButton alloc] init];
 btnLeft.frame = CGRectMake(0, 0, 90, 40);
 [btnLeft setTitle:@"  " forState:UIControlStateNormal];
 [btnLeft setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
 [btnLeft addTarget:self action:@selector(didLeftBtn) forControlEvents:UIControlEventTouchUpInside];
 self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btnLeft];
 self.btnLeft = self.navigationItem.leftBarButtonItem;
}

#pragma mark -    tableView
-(UITableView *)tableView{
 
 if (_tableView == nil) {
 _tableView = [[UITableView alloc] init];
 _tableView.delegate = self;
 _tableView.dataSource = self;
 _tableView.backgroundColor = [UIColor orangeColor];
 //     tableView      ,    --    tableView
 CGFloat hight = kScreenH;
 CGFloat x = 0;
 CGFloat y = kNavW;
 CGFloat width = 0;
 _tableView.frame = CGRectMake(x, y, width, hight);
 //         
 _tableView.showsVerticalScrollIndicator = NO;
 }
 return _tableView;
}
게 으 름 피 울 때 tableView 를 직접 만 들 고 너비=0 을 만 들 면 됩 니 다.

#pragma mark -         tableView
-(void)didLeftBtn{
 
 //  button           button
 self.btnLeft.enabled = NO;
 CGFloat hight = kScreenH;
 CGFloat x = 0;
 CGFloat y = kNavW;
 if (!self.openSlide) {
 //    
 [UIView animateWithDuration:0.3 animations:^{
  CGFloat width = kScreenW / 3;
  self.tableView.frame = CGRectMake(x, y, width, hight);
 }];
 [self.view addSubview:self.tableView];
 } else {
 [UIView animateWithDuration:0.3 animations:^{
  CGFloat width = 0;
  self.tableView.frame = CGRectMake(x, y, width, hight);
 }];
 }
 //           button
 [self performSelector:@selector(setBtnLeftEnabled) withObject:nil afterDelay:0.3];
 //        
 if (self.openSlide == YES) {
 self.openSlide = NO;
 } else {
 self.openSlide = YES;
 }
}
사 이 드 바 단 추 를 누 르 면 tableView 를 팝 업 합 니 다.이 과정 에서 애니메이션 을 실행 하면 딱딱 해 보이 지 않 습 니 다.tableView 의 폭 을 0--->화면 너비 의 3 분 의 1 로 합 니 다.
tableView 가 열 린 상 태 를 기록 합 니 다.
애니메이션 을 실행 하 는 과정 에서 사 이 드 바 단 추 를 사용 하지 않 습 니 다.코드 실행 시간 이 순간적으로 완성 되 었 기 때문에 애니메이션 실행 시간 은 0.3s 이 고 0.3s 가 지연 되 어 사 이 드 바 단 추 를 사용 하지 않 습 니 다.

//      tableView
//#pragma mark -   tableView
//-(void)removeSliedView{
//
// [self.tableView removeFromSuperview];
// self.btnLeft.enabled = YES;
//}
#pragma mark -         "  "  
-(void)setBtnLeftEnabled{
 
 self.btnLeft.enabled = YES;
 //          cell      
 self.tableView.contentOffset = CGPointMake(0, 0);
}


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

@end
이전에 실 수 를 한 적 이 있 습 니 다.사 이 드 바 단 추 를 누 르 면 tableView 를 만 들 고 tableView 를 없 애 는 것 을 누 르 면 성능 이 소 모 됩 니 다.게 으 른 로 딩 을 통 해 tableView 를 만 들 고 tableView 를 회수 할 때 너비=0 을 만 들 면 됩 니 다.
위의 그림 에서 보 듯 이 tableView 를 미 끄 러 뜨 릴 때 tableView 를 다시 클릭 하거나 미 끄 러 지 는 위 치 를 클릭 하면 0 으로 표 시 된 cell 을 맨 위 에 표시 하 는 cell 로 복원 하지 않 습 니 다.최적화 방안:tableView 의 오프셋 contentOffset 을 0 으로 만 들 면 됩 니 다.코드 는 tableView 를 팝 업 하고 tableView 를 회수 하 는 애니메이션 코드 에 쓸 수 없습니다.애니메이션 이 실 행 된 후의 코드 에 쓰 여 있 기 때문이다.
소스 코드 주소:https://git.oschina.net/alexpei/PBSliedMenu.git
이상 은 본문의 전체 내용 이 므 로 여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기