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

首頁 > 系統 > iOS > 正文

基于IOS實現帶箭頭的view

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

我使用DrawRect進行的View的拉伸(是這樣描述的吧??), 效果圖也實現了類似于微信的View效果, 你可以看一看.

創建繼承于UIView的視圖 .h文件

// backGoundView@property (nonatomic, strong) UIView * _Nonnull backGoundView;// titles@property (nonatomic, strong) NSArray * _Nonnull dataArray;// images@property (nonatomic, strong) NSArray * _Nonnull images;// height@property (nonatomic, assign) CGFloat row_height;// font@property (nonatomic, assign) CGFloat fontSize;// textColor@property (nonatomic, assign) UIColor * _Nonnull titleTextColor;// delegate@property (nonatomic, assign) id <selectIndexPathDelegate> _Nonnull delegate;// 初始化方法- (instancetype _Nonnull)initWithOrigin:(CGPoint) originWidth:(CGFloat) widthHeight:(CGFloat) heightType:(XTDirectionType)typeColor:( UIColor * _Nonnull ) color;- (void)popView;- (void)dismiss;

##.m 實現部分

定義用到的宏

#define ScreenWidth [UIScreen mainScreen].bounds.size.width#define ScreenHeight [UIScreen mainScreen].bounds.size.height#define Length 5#define Length2 15
@property (nonatomic, assign) CGPoint origin;     // 箭頭位置@property (nonatomic, assign) CGFloat height;     // 視圖的高度@property (nonatomic, assign) CGFloat width;      // 視圖的寬度@property (nonatomic, assign) XTDirectionType type;    // 箭頭位置類型@property (nonatomic, strong) UITableView *tableView;   // 填充的tableview

自定義初始化方法

- (instancetype)initWithOrigin:(CGPoint)origin Width:(CGFloat)width Height:(CGFloat)height Type:(XTDirectionType)type Color:(UIColor *)color{self = [super initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight)];if (self) {self.backgroundColor = [UIColor clearColor];self.origin = origin;self.width = width;self.height = height;self.type = type;self.backGoundView = [[UIView alloc] initWithFrame:CGRectMake(origin.x, origin.y, width, height)];self.backGoundView.backgroundColor = color;[self addSubview:self.backGoundView];[self.backGoundView addSubview:self.tableView];}return self;}

drawRect

#pragma mark - drawRect- (void)drawRect:(CGRect)rect {// Drawing codeCGContextRef context = UIGraphicsGetCurrentContext();switch (self.type) {case XTTypeOfUpLeft:case XTTypeOfUpCenter:case XTTypeOfUpRight:{{CGFloat startX = self.origin.x;CGFloat startY = self.origin.y;CGContextMoveToPoint(context, startX, startY);CGContextAddLineToPoint(context, startX + Length, startY + Length);CGContextAddLineToPoint(context, startX - Length, startY + Length);}break;}case XTTypeOfDownLeft:case XTTypeOfDownCenter:case XTTypeOfDownRight: {{CGFloat startX = self.origin.x;CGFloat startY = self.origin.y;CGContextMoveToPoint(context, startX, startY);CGContextAddLineToPoint(context, startX - Length, startY - Length);CGContextAddLineToPoint(context, startX + Length, startY - Length);}break;}case XTTypeOfLeftUp:case XTTypeOfLeftCenter:case XTTypeOfLeftDown: {{CGFloat startX = self.origin.x;CGFloat startY = self.origin.y;CGContextMoveToPoint(context, startX, startY);CGContextAddLineToPoint(context, startX + Length, startY - Length);CGContextAddLineToPoint(context, startX + Length, startY + Length);}break;}case XTTypeOfRightUp:case XTTypeOfRightCenter:case XTTypeOfRightDown: {{CGFloat startX = self.origin.x;CGFloat startY = self.origin.y;CGContextMoveToPoint(context, startX, startY);CGContextAddLineToPoint(context, startX - Length, startY - Length);CGContextAddLineToPoint(context, startX - Length, startY + Length);}break;}}CGContextClosePath(context);[self.backGoundView.backgroundColor setFill];[self.backgroundColor setStroke];CGContextDrawPath(context, kCGPathFillStroke);}

彈出視圖

#pragma mark - popView- (void)popView{// 同步顯示 子控件(views)和(self)NSArray *results = [self.backGoundView subviews];for (UIView *view in results) {[view setHidden:YES];}UIWindow *windowView = [UIApplication sharedApplication].keyWindow;[windowView addSubview:self];switch (self.type) {case XTTypeOfUpLeft: {{self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y + Length, 0, 0);CGFloat origin_x = self.origin.x - Length2;CGFloat origin_y = self.origin.y + Length;CGFloat size_width = self.width;CGFloat size_height = self.height;[self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];}break;}case XTTypeOfUpCenter: {{self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y + Length, 0, 0);CGFloat origin_x = self.origin.x - self.width / 2;CGFloat origin_y = self.origin.y + Length;CGFloat size_width = self.width;CGFloat size_height = self.height;[self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];}break;}case XTTypeOfUpRight: {{self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y + Length, 0, 0);CGFloat origin_x = self.origin.x + Length2;CGFloat origin_y = self.origin.y + Length;CGFloat size_width = -self.width;CGFloat size_height = self.height;[self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];}break;}case XTTypeOfDownLeft: {{self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y - Length, 0, 0);CGFloat origin_x = self.origin.x - Length2;CGFloat origin_y = self.origin.y - Length;CGFloat size_width = self.width;CGFloat size_height = -self.height;[self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];}break;}case XTTypeOfDownCenter: {{self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y - Length, 0, 0);CGFloat origin_x = self.origin.x - self.width / 2;CGFloat origin_y = self.origin.y - Length;CGFloat size_width = self.width;CGFloat size_height = -self.height;[self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];}break;}case XTTypeOfDownRight: {{self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y - Length, 0, 0);CGFloat origin_x = self.origin.x-self.width + Length2;CGFloat origin_y = self.origin.y - Length;CGFloat size_width = self.width;CGFloat size_height = -self.height;[self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];}break;}case XTTypeOfLeftUp: {{self.backGoundView.frame = CGRectMake(self.origin.x + Length, self.origin.y, 0, 0);CGFloat origin_x = self.origin.x + Length;CGFloat origin_y = self.origin.y - Length2;CGFloat size_width = self.width;CGFloat size_height = self.height;[self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];}break;}case XTTypeOfLeftCenter: {{self.backGoundView.frame = CGRectMake(self.origin.x + Length, self.origin.y, 0, 0);CGFloat origin_x = self.origin.x + Length;CGFloat origin_y = self.origin.y - self.height / 2;CGFloat size_width = self.width;CGFloat size_height = self.height;[self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];}break;}case XTTypeOfLeftDown: {{self.backGoundView.frame = CGRectMake(self.origin.x + Length, self.origin.y, 0, 0);CGFloat origin_x = self.origin.x + Length;CGFloat origin_y = self.origin.y - self.height + Length2;CGFloat size_width = self.width;CGFloat size_height = self.height;[self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];}break;}case XTTypeOfRightUp: {{self.backGoundView.frame = CGRectMake(self.origin.x - Length, self.origin.y, 0, 0);CGFloat origin_x = self.origin.x - Length;CGFloat origin_y = self.origin.y - Length2;CGFloat size_width = -self.width;CGFloat size_height = self.height;[self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];}break;}case XTTypeOfRightCenter: {{self.backGoundView.frame = CGRectMake(self.origin.x - Length, self.origin.y, 0, 0);CGFloat origin_x = self.origin.x - Length;CGFloat origin_y = self.origin.y - self.height / 2;CGFloat size_width = -self.width;CGFloat size_height = self.height;[self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];}break;}case XTTypeOfRightDown: {{self.backGoundView.frame = CGRectMake(self.origin.x - Length, self.origin.y, 0, 0);CGFloat origin_x = self.origin.x - Length;CGFloat origin_y = self.origin.y - self.height + Length2;CGFloat size_width = -self.width;CGFloat size_height = self.height;[self startAnimateView_x:origin_x _y:origin_y origin_width:size_width origin_height:size_height];}break;}}}

#pragma mark -

- (void)startAnimateView_x:(CGFloat) x_y:(CGFloat) yorigin_width:(CGFloat) widthorigin_height:(CGFloat) height{[UIView animateWithDuration:0.25 animations:^{self.backGoundView.frame = CGRectMake(x, y, width, height);}completion:^(BOOL finished) {NSArray *results = [self.backGoundView subviews];for (UIView *view in results) {[view setHidden:NO];}}];}

點擊空白處回收

#pragma mark -- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{if (![[touches anyObject].view isEqual:self.backGoundView]) {[self dismiss];} }
#pragma mark -- (void)dismiss{/*** 刪除 在backGroundView 上的子控件*/NSArray *results = [self.backGoundView subviews];for (UIView *view in results) {[view removeFromSuperview]; }[UIView animateWithDuration:0.25 animations:^{//self.backGoundView.frame = CGRectMake(self.origin.x, self.origin.y, 0, 0);} completion:^(BOOL finished) {//[self removeFromSuperview];}];}

內部的tableview

#pragma mark -- (UITableView *)tableView{if (!_tableView) {_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.backGoundView.frame.size.width - 5, self.backGoundView.frame.size.height) style:UITableViewStylePlain];_tableView.dataSource = self;_tableView.backgroundColor = [UIColor clearColor];_tableView.delegate = self;}return _tableView;}#pragma mark -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{return self.dataArray.count;}#pragma mark -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{if (self.row_height == 0) {return 44;}else{return self.row_height;}}#pragma mark -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{static NSString *cellIdentifier = @"cellIdentifier2";UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];if (!cell) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];}cell.backgroundColor = [UIColor clearColor];cell.imageView.image = [UIImage imageNamed:self.images[indexPath.row]];cell.textLabel.text = self.dataArray[indexPath.row];cell.textLabel.font = [UIFont systemFontOfSize:self.fontSize];cell.textLabel.textColor = self.titleTextColor;return cell;}// 想要實現點擊進行其他操作, 這里用到了協議- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{if (self.delegate && [self.delegate respondsToSelector:@selector(selectIndexPathRow:)]) {[self.delegate selectIndexPathRow:indexPath.row];}}

##在.h文件還要聲明一份協議

@protocol selectIndexPathDelegate <NSObject>- (void)selectIndexPathRow:(NSInteger )index;@end

使用

@interface ViewController ()<selectIndexPathDelegate>

##你可以在btn的點擊方法里這樣寫

// 支持多種類型/**XTTypeOfUpLeft,  // 上左XTTypeOfUpCenter, // 上中XTTypeOfUpRight, // 上右XTTypeOfDownLeft, // 下左XTTypeOfDownCenter, // 下中XTTypeOfDownRight, // 下右XTTypeOfLeftUp,  // 左上XTTypeOfLeftCenter, // 左中XTTypeOfLeftDown, // 左下XTTypeOfRightUp, // 右上XTTypeOfRightCenter,// 右中XTTypeOfRightDown, // 右下*/CGPoint point = CGPointMake(_customBtn.center.x,_customBtn.frame.origin.y + 64);XTPopView *view1 = [[XTPopView alloc] initWithOrigin:point Width:130 Height:40 * 4 Type:XTTypeOfUpRight Color:[UIColor colorWithRed:0.2737 green:0.2737 blue:0.2737 alpha:1.0]];view1.dataArray = @[@"發起群聊",@"添加朋友", @"掃一掃", @"收付款"];view1.images = @[@"發起群聊",@"添加朋友", @"掃一掃", @"付款"];view1.fontSize = 13;view1.row_height = 40;view1.titleTextColor = [UIColor whiteColor];view1.delegate = self;[view1 popView];

##想要使用點擊方法 只要實現協議的方法就可以了

- (void)selectIndexPathRow:(NSInteger)index{switch (index) {case 0:{NSLog(@"Click 0 ......");}break;case 1:{NSLog(@"Clikc 1 ......");}break;case 2:{NSLog(@"Clikc 2 ......");}break;case 3:{NSLog(@"Clikc 3 ......");}break;default:break;}}

總結

以上就是基于IOS實現帶箭頭的view的全部內容,希望對大家開發IOS能有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久免费成人精品视频| 国产精品ⅴa在线观看h| 欧美精品免费在线观看| 亚洲精品日韩久久久| 亚洲午夜色婷婷在线| 国产日韩欧美日韩大片| 亚洲一区二区自拍| 亚洲精品有码在线| 福利视频导航一区| 欧美精品午夜视频| 欧美午夜精品久久久久久人妖| 日韩中文第一页| 欧美在线视频导航| 91高潮精品免费porn| 国内免费精品永久在线视频| 91精品国产777在线观看| 国产精品自拍小视频| 亚洲国产日韩欧美在线99| 91高清在线免费观看| 日韩中文综合网| 国产在线拍揄自揄视频不卡99| 欧美性极品少妇精品网站| 亚洲qvod图片区电影| 日韩av影视在线| 久久精品99久久久香蕉| 成年无码av片在线| 欧美亚洲成人精品| 91网在线免费观看| 成人黄色片在线| 国产精品国内视频| 国产在线精品一区免费香蕉| 欧美激情精品久久久久久免费印度| 亚洲人成免费电影| 92国产精品久久久久首页| 国产伊人精品在线| 国产一区二区三区在线播放免费观看| 成人a级免费视频| 中文字幕日韩av综合精品| 日韩电影大全免费观看2023年上| 亚洲成人黄色网址| 欧美人与性动交a欧美精品| 久久精品国产欧美激情| 国产午夜精品一区理论片飘花| 国产精品久久久久久久久久久久| 久久全国免费视频| zzijzzij亚洲日本成熟少妇| 欧美国产日韩免费| 亚洲美女www午夜| 国内精品久久久久久中文字幕| 5252色成人免费视频| 亚洲国产精品视频在线观看| 中文字幕成人在线| 亚洲无亚洲人成网站77777| 亚洲欧美日韩爽爽影院| 中文字幕日韩在线播放| 7m第一福利500精品视频| 欧美日韩视频在线| 亚洲激情国产精品| 国产视频在线观看一区二区| 久久亚洲精品一区二区| 中文字幕av一区二区三区谷原希美| 国产伊人精品在线| 亚洲国产另类久久精品| 日韩精品在线观看一区| 97在线日本国产| 久久久之久亚州精品露出| 岛国精品视频在线播放| 久久视频在线免费观看| 国产精品aaa| 亚洲激情在线观看视频免费| 日韩在线视频线视频免费网站| 午夜精品久久久久久久久久久久| 欧美精品制服第一页| 中文国产亚洲喷潮| 日韩电视剧在线观看免费网站| 国产精品高清免费在线观看| 亚洲人成电影在线| 亚洲精品久久久久久久久久久久| 亚洲老头老太hd| 欧美黑人巨大精品一区二区| 欧美成人精品不卡视频在线观看| 久久视频在线看| 国产一区二区三区三区在线观看| 国产精品白嫩初高中害羞小美女| 久久久精品久久久| 国产91在线播放| 亚洲视频在线观看视频| 久久精品99久久香蕉国产色戒| 国产第一区电影| 日韩欧美在线视频| 91亚洲精品在线| 久久免费福利视频| 久久久久久久久久婷婷| 精品国产91久久久久久| 国产精品91在线| 成人在线国产精品| 亚洲乱亚洲乱妇无码| 亚洲国产日韩一区| 国产在线拍偷自揄拍精品| 日韩毛片在线看| 国产区亚洲区欧美区| 日韩欧美一区二区三区| 日韩欧美在线网址| 欧美日韩免费区域视频在线观看| 久久久久久成人精品| 日韩精品高清在线| 日韩欧美在线视频观看| 97国产真实伦对白精彩视频8| 日韩在线免费视频观看| 视频在线一区二区| 91在线视频成人| 亚洲精品日韩欧美| 日本中文字幕久久看| 成人免费福利在线| 中文字幕在线成人| 亚洲一区二区久久| 日本成人在线视频网址| 久久久www成人免费精品张筱雨| 亚洲精品视频播放| 国产成人涩涩涩视频在线观看| 国产乱人伦真实精品视频| 欧美精品在线免费| 国产大片精品免费永久看nba| 亚洲精品视频网上网址在线观看| 日韩精品免费在线播放| 国产性色av一区二区| 91久久综合亚洲鲁鲁五月天| 亚洲va欧美va在线观看| 中文字幕亚洲综合久久筱田步美| 亚洲欧美国产日韩中文字幕| 久久影视三级福利片| 欧美人与物videos| 久久久成人av| 日韩有码在线观看| 亚洲国产高清福利视频| 国产欧美一区二区三区视频| 美女视频久久黄| 日韩精品在线视频| 欧美日本在线视频中文字字幕| 久久久精品美女| 久久久久久噜噜噜久久久精品| 久久久久久中文| 红桃av永久久久| 日本精品视频网站| 色伦专区97中文字幕| 亚洲精品国产拍免费91在线| 美女黄色丝袜一区| 欧美成人一二三| 欧美日韩加勒比精品一区| 欧美日韩裸体免费视频| 国产成人综合精品| 亚洲午夜未满十八勿入免费观看全集| 在线看日韩欧美| 在线播放精品一区二区三区| 欧美情侣性视频| 国产午夜精品全部视频在线播放| 奇门遁甲1982国语版免费观看高清| 91中文字幕在线| 欧美丰满片xxx777| 青青久久av北条麻妃黑人| 久久激情视频久久| 欧美性猛交xxxx免费看久久久| 秋霞av国产精品一区| 欧美色图在线视频|