效果图:
代码如下:
#import "PopView.h"
#define kPopupTriangleHeigh 5
#define kPopupTriangleWidth 6
#define kPopupTriangleTopPointX 3 * (self.frame.size.width - kPopupTriangleWidth)/ 20.0f
#define kBorderOffset 0//0.5f
@implementation PopView
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
self.backgroundColor = [UIColor clearColor];
[self initUI];
}
return self;
}
- (void)initUI
{
_label = [[UILabel alloc] init];
_label.textColor = [UIColor colorFromHex:0x666666];
_label.font = [UIFont systemFontOfSize:11];
_label.numberOfLines = 0;
_label.text = @"地址作为评估贷款额度的重要依据,需精确到门牌号\n请按如下格式填写:\n小区类:XX路XX号XX小区XX栋XX室\n农村类:XX县XX镇XX村XX组\n大厦类:XX路XX号XX大厦XX层XX室";
[self addSubview:_label];
[_label mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(self.mas_left).mas_equalTo(10);
make.centerX.mas_equalTo(self.mas_centerX);
make.top.mas_equalTo(self.mas_top).mas_equalTo(20);
}];
}
-(void)drawRect:(CGRect)rect{
[super drawRect:rect];
CGFloat viewW = rect.size.width;
CGFloat viewH = rect.size.height;
CGFloat strokeWidth = 0.2;
CGFloat borderRadius = 5;
CGFloat offset = strokeWidth + kBorderOffset;
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineJoin(context, kCGLineJoinRound); //
CGContextSetLineWidth(context, strokeWidth); // 设置画笔宽度
CGContextSetStrokeColorWithColor(context, [UIColor colorFromHex:0x3082f2].CGColor); // 设置画笔颜色
CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor); // 设置填充颜色
CGContextBeginPath(context);
CGContextMoveToPoint(context, borderRadius+offset, kPopupTriangleHeigh + offset);
CGContextAddLineToPoint(context, kPopupTriangleTopPointX - kPopupTriangleWidth / 2.0 + offset, kPopupTriangleHeigh + offset);
CGContextAddLineToPoint(context, kPopupTriangleTopPointX, offset);
CGContextAddLineToPoint(context, kPopupTriangleTopPointX + kPopupTriangleWidth / 2.0 +offset, kPopupTriangleHeigh+offset);
CGContextAddArcToPoint(context, viewW-offset, kPopupTriangleHeigh+offset, viewW-offset, kPopupTriangleHeigh+offset + borderRadius, borderRadius-strokeWidth);
CGContextAddArcToPoint(context, viewW-offset, viewH - offset, viewW-borderRadius-offset, viewH - offset, borderRadius-strokeWidth);
CGContextAddArcToPoint(context, offset, viewH - offset, offset, viewH - borderRadius - offset, borderRadius-strokeWidth);
CGContextAddArcToPoint(context, offset, kPopupTriangleHeigh + offset, viewW - borderRadius - offset, kPopupTriangleHeigh + offset, borderRadius-strokeWidth);
CGContextClosePath(context);
CGContextDrawPath(context, kCGPathFillStroke);
}
- (void)dismiss
{
__weak __typeof(self) weakSelf = self;
[UIView animateWithDuration:0.2 animations:^{
weakSelf.alpha = 0;
weakSelf.frame = CGRectMake(weakSelf.frame.origin.x + kPopupTriangleTopPointX , weakSelf.frame.origin.y, 0, 0);
} completion:^(BOOL finished) {
[_label removeFromSuperview];
[weakSelf removeFromSuperview];
}];
}
@end