亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS抽屜效果開發案例分享

2020-07-26 03:23:05
字體:
來源:轉載
供稿:網友

本文實例為大家分享了iOS抽屜效果開發實例,供大家參考,具體內容如下

在顯示在窗口的控制器上添加三個view(如果只需要往一邊滑動就只加2個view)

先聲明三個view

#import "ViewController.h" @interface ViewController ()@property(nonatomic, weak) UIView *mainV;@property(nonatomic, weak) UIView *leftV;@property(nonatomic, weak) UIView *rightV;@end

添加view到控制器view上

#pragma mark - 添加子控件- (void)setUpChildViews {   UIView *leftV = [[UIView alloc]initWithFrame:self.view.bounds];   leftV.backgroundColor = [UIColor orangeColor];   [self.view addSubview:leftV];   _leftV = leftV;   UIView *rightV = [[UIView alloc]initWithFrame:self.view.bounds];   rightV.backgroundColor = [UIColor groupTableViewBackgroundColor];   [self.view addSubview:rightV];   _rightV = rightV;   UIView *mainV = [[UIView alloc]initWithFrame:self.view.bounds];   mainV.backgroundColor = [UIColor yellowColor];   [self.view addSubview:mainV];   _mainV = mainV;} - (void)viewDidLoad { [super viewDidLoad];   //添加子控件 [self setUpChildViews];   //添加Pan手勢 UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(pan:)];   [self.view addGestureRecognizer:pan];   //添加點按手勢,在主視圖上任意位置點擊回到屏幕開始位置 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap)];   [self.view addGestureRecognizer:tap];  }
#pragma mark - 手勢識別方法#define targetL -230#define targetR 200#define screenW [UIScreen mainScreen].bounds.size.width- (void)pan:(UIPanGestureRecognizer *)pan {   //獲取手勢移動的位置 CGPoint tranP = [pan translationInView:self.view];   //獲取x的偏移量 CGFloat offsetX = tranP.x;   //修改mainV的frame _mainV.frame = [self frameWithOffsetX:offsetX];   //判斷mainV的x是否大于0 [self observeValueForKeyPath:nil ofObject:nil change:nil context:nil];   //復位 [pan setTranslation:CGPointZero inView:self.view];   //判斷當手勢結束的時候,定位 if (pan.state == UIGestureRecognizerStateEnded) {     CGFloat target = 0;     if (_mainV.frame.origin.x > screenW * 0.5) {   //定位到右邊   target = targetR;  }else if(CGRectGetMaxX(_mainV.frame) < screenW * 0.5) {   //定位到左邊   target = targetL;  }     //獲取X軸需要移動的偏移量  CGFloat offsetX = target - _mainV.frame.origin.x;     [UIView animateWithDuration:0.25 animations:^{       _mainV.frame = target == 0 ? self.view.bounds : [self frameWithOffsetX:offsetX];   }];    }  }
- (void)tap {   [UIView animateWithDuration:0.25 animations:^{  _mainV.frame = self.view.bounds; }];  }#define kMaxY 80#pragma mark - 根據offsetX計算mainV的frame- (CGRect)frameWithOffsetX:(CGFloat)offsetX {   //獲取上一次的frame CGRect frame = _mainV.frame;   //獲取屏幕的高度 CGFloat screenH = [UIScreen mainScreen].bounds.size.height;   //獲取屏幕的寬度 //CGFloat screenW = [UIScreen mainScreen].bounds.size.width;   //X軸平移一點對應Y軸需要平移的距離 CGFloat offsetY = offsetX * kMaxY / screenW;   //獲取上一次的高度 CGFloat preH = frame.size.height;   //獲取上一次的寬度 CGFloat preW = frame.size.width;   //獲取當前高度 CGFloat curH = preH - 2 * offsetY; //如果是向左滑動 if(frame.origin.x < 0) {  curH = preH + 2 * offsetY; }   //獲取尺寸的縮放比例 CGFloat scale = curH / preH;   //獲取當前寬度 CGFloat curW = preW * scale;   //獲取當前x frame.origin.x += offsetX;   //獲取當前y CGFloat y = (screenH - curH) / 2; frame.origin.y = y;   frame.size.width = curW; frame.size.height = curH;   return frame;  }
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {   if(_mainV.frame.origin.x > 0) {//往右邊滑動  _rightV.hidden = YES; }else if(_mainV.frame.origin.x < 0) {//往左邊滑動  _rightV.hidden = NO; }  }

如果想要在mainV主視圖中顯示tableView,就新創建一個TableViewController,在這里面顯示tableView的數據,

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {  return 30;} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {     static NSString *ID = @"cell";   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];   if(cell == nil) {  cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID]; }   cell.textLabel.text = [NSString stringWithFormat:@"第%ld行", indexPath.row];   return cell;}

再創建一個在storyboard中顯示的控制器XXMainViewController,繼承自實現了抽屜效果的ViewController,并且在storyboard中將class改為這個控制的類名,還要將顯示tableView的控制成為他的子控制器

- (void)viewDidLoad { [super viewDidLoad];   XXViewController *vc = [[XXViewController alloc]init]; vc.view.frame = self.view.bounds;   //讓vc成為主視圖控制器的子控制器 [self addChildViewController:vc];   //主視圖展示tableView [self.mainV addSubview:vc.view];  }

為了在XXMainViewController中只能訪問mainV而不能修改他的值,所以將子控件的view暴露在ViewController.h中,并添加read-only

#import <UIKit/UIKit.h> @interface ViewController : UIViewController@property(nonatomic, weak, readonly) UIView *mainV;@property(nonatomic, weak, readonly) UIView *leftV;@property(nonatomic, weak, readonly) UIView *rightV;@end

運行效果圖:

以上就是本文的全部內容,希望對大家學習iOS程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品免费在线视频观看| 欧美久久久精品| 日韩在线观看av| 91精品国产自产在线观看永久| 亚洲欧美日韩综合| 国产精品美女www| 国模精品一区二区三区色天香| 亚洲视频在线观看网站| 欧美精品在线网站| 国产日韩精品一区二区| 91精品国产乱码久久久久久久久| 欧美极品美女电影一区| 久久精品国产精品亚洲| 亚洲黄色av女优在线观看| 日韩免费av片在线观看| 日韩一区二区欧美| 97精品欧美一区二区三区| 国产噜噜噜噜噜久久久久久久久| 欧美一区二区三区免费观看| 国产欧美日韩专区发布| 亚洲视频在线免费观看| 精品国产精品三级精品av网址| 成人福利视频网| 久久五月天综合| 国产999视频| 久久精品国产v日韩v亚洲| 亚洲二区在线播放视频| 欧美成人精品一区二区| 成人国产在线激情| 欧美黑人极品猛少妇色xxxxx| 久久99精品久久久久久青青91| 国内精品视频久久| 亚洲国产欧美一区二区三区同亚洲| 亚洲精品在线观看www| 国产精品极品在线| 国产精品久久久久久av福利软件| 国产亚洲视频在线| 久久免费精品日本久久中文字幕| 一区二区三区天堂av| 日本人成精品视频在线| 在线观看日韩www视频免费| 国内精品视频久久| 国产v综合ⅴ日韩v欧美大片| 国产拍精品一二三| 国产视频久久久| 国产91九色视频| 这里只有精品视频| 成人黄色在线观看| 黑人狂躁日本妞一区二区三区| 日韩久久精品电影| 久久成人精品视频| 久久精品国产96久久久香蕉| 亚洲欧洲xxxx| 亚洲国产精品网站| 九九热最新视频//这里只有精品| 亚洲一区二区久久久| 日韩在线视频线视频免费网站| 国产亚洲精品va在线观看| 亚洲亚裔videos黑人hd| 亚洲人精选亚洲人成在线| 精品日本高清在线播放| 久久亚洲综合国产精品99麻豆精品福利| 粉嫩av一区二区三区免费野| 欧美日韩另类在线| 亚洲精品动漫100p| 人人爽久久涩噜噜噜网站| 久久久亚洲影院| 亚洲国产古装精品网站| 亚洲女人天堂av| 日韩欧美在线免费观看| 自拍偷拍亚洲精品| 亚洲自拍偷拍区| 美女国内精品自产拍在线播放| 色香阁99久久精品久久久| 国产精品视频一| 亚洲成人1234| 日韩在线观看免费高清完整版| 久久99久国产精品黄毛片入口| 日韩av网站电影| 国产精品露脸自拍| 亚洲经典中文字幕| 国产日韩欧美91| 欧美夫妻性生活视频| 欧美一区视频在线| 在线观看亚洲区| 国产精品一区二区电影| 精品国产91久久久久久| 亚洲第一精品电影| 亚洲欧美在线磁力| 精品国产欧美成人夜夜嗨| 国产精品亚洲激情| 国产不卡av在线| 高清欧美性猛交xxxx| 久久久国产精品一区| 亚洲毛片在线免费观看| 91精品综合久久久久久五月天| 欧美夫妻性视频| 国产视频精品久久久| 精品中文字幕视频| 亚洲国产日韩欧美在线99| 亚洲娇小xxxx欧美娇小| 91视频免费在线| 亚洲老头同性xxxxx| 国产97色在线|日韩| 奇米一区二区三区四区久久| 亚洲国产精品视频在线观看| 久久久精品免费视频| 亚洲伊人一本大道中文字幕| 欧美日韩在线视频一区| 亚洲91精品在线| 国产精品av电影| 精品美女永久免费视频| 亚洲一区二区三区四区视频| 中文字幕亚洲欧美在线| 国产精品一区久久久| 国产精品一区二区在线| 欧美午夜精品久久久久久久| 精品一区二区亚洲| 国产999精品久久久影片官网| 日韩在线国产精品| 欧美激情精品久久久| 亚洲在线视频福利| 久久久久久久成人| 97视频免费看| 欧美洲成人男女午夜视频| 91成人性视频| 日韩专区在线播放| 国产精品男人爽免费视频1| 亚洲色图综合网| 日韩精品在线视频美女| 日韩二区三区在线| 视频一区视频二区国产精品| 欧美黑人一级爽快片淫片高清| www国产亚洲精品久久网站| 大荫蒂欧美视频另类xxxx| 欧美日韩国产一区在线| 国产精品视频一| 深夜成人在线观看| 日韩免费中文字幕| 欧美综合国产精品久久丁香| 九九热99久久久国产盗摄| 久久99亚洲精品| 欧美一级片在线播放| 久久中文精品视频| 日韩精品中文字幕有码专区| 97超碰国产精品女人人人爽| 日韩精品免费在线播放| 欧美一级高清免费| 精品久久久久久久久中文字幕| 一本色道久久综合亚洲精品小说| 欧美一级高清免费播放| 精品毛片三在线观看| 日韩av有码在线| 国产精品天天狠天天看| 亚洲欧美在线免费| 亚洲欧美中文在线视频| 亚洲第一福利网| 久久久国产一区二区| 亚洲欧洲第一视频| 国产精品视频资源| 亚洲在线www| 欧美在线激情视频| 亚洲视频免费一区| 欧美大片免费看|