您的位置:首页 > 产品设计 > UI/UE

Quartz2D之贝塞尔涂鸦板(UIBezierPath)

2014-11-23 09:26 525 查看
#import "DHPalette.h"

@interface DHPalette ()

/**

 记录所有路径的数组

 */

@property (nonatomic,
strong) NSMutableArray *paths;

@end

@implementation DHPalette

#pragma mark - 懒加载

- (NSMutableArray *)paths
{
   
if (nil ==
_paths) {
       
_paths = [NSMutableArray
array];
    }
   
return _paths;
}

#pragma mark - 清除上一条线
- (void)back
{

    [self.paths
removeLastObject];

    [self
setNeedsDisplay];
}

#pragma mark - 清除屏幕
- (void)clear
{

    [self.paths
removeAllObjects];

    [self
setNeedsDisplay];
}

#pragma mark - 记录手指按下时的起点到最后一条路径当中
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
   
CGPoint startPoint = [[touches
anyObject] locationInView:self];

    UIBezierPath *path = [UIBezierPath
bezierPath];
    [path
moveToPoint:startPoint];
    [self.paths
addObject:path];

    [self
setNeedsDisplay];
}

#pragma mark - 记录手指再画板上移动的时候的点到最后一条路径当中
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
   
CGPoint currentPoint = [[touches
anyObject] locationInView:self];
    [[self.paths
lastObject] addLineToPoint:currentPoint];

    [self
setNeedsDisplay];
}

#pragma mark - 记录手指抬起的时候的终点到最后一条路径当中
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
   
CGPoint endPoint = [[touches
anyObject] locationInView:self];

    [[self.paths
lastObject] addLineToPoint:endPoint];

    [self
setNeedsDisplay];
}

#pragma mark - 遍历数组画出所有的路径
- (void)drawRect:(CGRect)rect {
    [self.paths
enumerateObjectsUsingBlock:^(UIBezierPath *path,
NSUInteger idx, BOOL *stop) {
        [path
stroke];
    }];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息