iOS-畫形狀的view

來源:互聯網
上載者:User
#import <UIKit/UIKit.h>#import <QuartzCore/QuartzCore.h>@interface UIView (Shape)- (void)setShape:(CGPathRef)shape;@end
 
 
#import "UIView+Shape.h"@implementation UIView (Shape)- (void)setShape:(CGPathRef)shape{    if (shape == nil) {        self.layer.mask = nil;    }        CAShapeLayer* maskLayer = [CAShapeLayer layer];    maskLayer.path = shape;    self.layer.mask = maskLayer;}@end
 
 
@interface UIBezierPath (BasicShape)
+ (UIBezierPath *)cutCorner:(CGRect)originalFrame length:(CGFloat)length;@end
#import "UIBezierPath+BasicShape.h"@implementation UIBezierPath (BasicShape)+ (UIBezierPath *)cutCorner:(CGRect)originalFrame length:(CGFloat)length{    CGRect rect = originalFrame;    UIBezierPath *bezierPath = [UIBezierPath bezierPath];    [bezierPath moveToPoint:CGPointMake(0, length)];    [bezierPath addLineToPoint:CGPointMake(length, 0)];    [bezierPath addLineToPoint:CGPointMake(rect.size.width - length, 0)];    [bezierPath addLineToPoint:CGPointMake(rect.size.width, length)];    [bezierPath addLineToPoint:CGPointMake(rect.size.width, rect.size.height - length)];    [bezierPath addLineToPoint:CGPointMake(rect.size.width - length, rect.size.height)];    [bezierPath addLineToPoint:CGPointMake(length, rect.size.height)];    [bezierPath addLineToPoint:CGPointMake(0, rect.size.height - length)];    [bezierPath closePath];    return bezierPath;}@end
使用方法: 在[UIView viewWillAppear:]方法中加入下面代碼
[self.view setShape:[UIBezierPath cutCorner:self.view.bounds length:40].CGPath];

效果:

 
 
 
讓自訂 Button 響應自訂 Shape 內的點擊事件
 
 
#import <UIKit/UIKit.h>#import "UIView+Shape.h"#import "UIBezierPath+BasicShape.h"@interface RFButton : UIButton{    CGPathRef path;}@end
///  RFButton.m//  ChristApp////  Created by Haozhen Li on 13-12-6.////#import "RFButton.h"@implementation RFButton- (id)initWithFrame:(CGRect)frame{    self = [super initWithFrame:frame];    if (self) {        // Initialization code    }    return self;}- (void)setShape:(CGPathRef)shape{    [super setShape:shape];    path = shape;}- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{    if (CGPathIsEmpty(path)) {        return YES;    }    //判斷觸發點是否在規定的 Shape 內    if (CGPathContainsPoint(path, nil, point, nil)) {        return YES;    }    return NO;}@end



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.