国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > 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能有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新沂市| 达日县| 衡水市| 湖州市| 富民县| 湟源县| 崇信县| 大荔县| 伊川县| 和平县| 福清市| 枣强县| 浦江县| 门源| 枝江市| 井陉县| 郑州市| 彰化市| 新营市| 沂水县| 台东市| 任丘市| 泰州市| 广水市| 华宁县| 自治县| 买车| 长春市| 尚志市| 玉龙| 建昌县| 腾冲县| 普陀区| 景谷| 黔南| 花莲县| 平乐县| 盐边县| 巫山县| 邻水| 搜索|