大佬教程收集整理的这篇文章主要介绍了iphone – 用我的手指在iOS中绘制贝塞尔曲线?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
定义此方法的一种方法是让用户拖动手指以定义起点和终点,然后点击控制点处的屏幕.这是一个处理此问题的示例视图.
BezierView.h
enum { BezierStateNone = 0,BezierStateDefiningLine,BezierStateDefiningCP1,BezierStateDefiningCP2 }; @interface BezierView : UIView { CGPoint startPt,endPt,cPt1,cPt2; UInt8 state; UIBezierPath *curvePath; @private UITouch *currentTouch; } @property (nonatomic,retain) UIBezierPath *curvePath; @end
BezierView.m
@interface BezierView @dynamic curvePath; - (UIBezierPath *)curvePath { return [[curvePath retain] autorelease]; } - (void)setCurvePath:(UIBezierPath *)newPath { id tmp = curvePath; curvePath = [newPath retain]; [tmp release]; state = BezierStateNone; [self setNeedsDisplay]; } - (void)_updateCurve { UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:startPt]; [path addCurveToPoint:endPt controlPoint1:cPt1 controlPoint2:cPt2]; } - (void)_calcDefaultControls { if(ABS(startPt.x - endPt.X) > ABS(startPt.y - endPt.y)) { cPt1 = (CGPoint){(startPt.x + endPt.X) / 2,startPt.y}; cPt2 = (CGPoint){CPt1.x,endPt.y}; } else { cPt1 = (CGPoint){startPt.x,(startPt.y + endPt.y) / 2}; cPt2 = (CGPoint){endPt.x,cPt1.y}; } } - (void)drawRect:(CGRect)rect { UIBezierPath *path = self.curvePath; if(path) [path stroke]; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if(currentTouch) return; if(state == BezierStateNonE) { state = BezierStateDefiningLine; currentTouch = [touches anyObject]; startPt = [currentTouch LOCATIOnInView:self]; } else if(state == BezierStateDefiningCP1) { currentTouch = [touches anyObject]; cPt1 = [currentTouch LOCATIOnInView:self]; [self _updateCurve]; } else if(state == BezierStateDefiningCP2) { currentTouch = [touches anyObject]; cPt2 = [currentTouch LOCATIOnInView:self]; [self _updateCurve]; } } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { if(!currentTouch) return; if(state == BezierStateDefiningLinE) { endPt = [currentTouch LOCATIOnInView:self]; [self _calcDefaultControls]; [self _updateCurve]; } else if(state == BezierStateDefiningCP1) { cPt1 = [currentTouch LOCATIOnInView:self]; [self _updateCurve]; } else if(state == BezierStateDefiningCP2) { cPt2 = [currentTouch LOCATIOnInView:self]; [self _updateCurve]; } } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { if(!currentTouch) return; if(state == BezierStateDefiningLinE) { state = BezierStateDefiningCP1; } else if(state == BezierStateDefiningCP1) { state = BezierStateDefiningCP2; } else if(state == BezierStateDefiningCP2) { state = BezierStateNone; } currentTouch = nil; } - (void)touchesCanceled:(NSSet *)touches withEvent:(UIEvent *)event { if(state == BezierStateDefiningLinE) { self.curvePath = nil; self.state = BezierStateNone; } self.currentTouch = nil; }
以上是大佬教程为你收集整理的iphone – 用我的手指在iOS中绘制贝塞尔曲线?全部内容,希望文章能够帮你解决iphone – 用我的手指在iOS中绘制贝塞尔曲线?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。