UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:startOfLine];
[path addLineToPoint:endOfLine];
[path stroke];
UIBezierPath Class Reference
편집
- (void)viewDidLoad
{
[super viewDidLoad];
// Create an array to store line points
self.linePoints = [NSMutableArray array];
// Create double tap gesture recognizer
UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
[doubleTap setNumberOfTapsRequired:2];
[self.view addGestureRecognizer:doubleTap];
}
- (void)handleDoubleTap:(UITapGestureRecognizer *)sender
{
if (sender.state == UIGestureRecognizerStateRecognized) {
CGPoint touchPoint = [sender locationInView:sender.view];
// If touch is within range of previous start/end points, use that point.
for (NSValue *pointValue in linePoints) {
CGPoint linePoint = [pointValue CGPointValue];
CGFloat distanceFromTouch = sqrtf(powf((touchPoint.x - linePoint.x), 2) + powf((touchPoint.y - linePoint.y), 2));
if (distanceFromTouch < MAX_TOUCH_DISTANCE) { // Say, MAX_TOUCH_DISTANCE = 20.0f, for example...
touchPoint = linePoint;
}
}
// Draw the line:
// If no start point yet specified...
if (!currentPath) {
currentPath = [UIBezierPath bezierPath];
[currentPath moveToPoint:touchPoint];
}
// If start point already specified...
else {
[currentPath addLineToPoint:touchPoint];
[currentPath stroke];
currentPath = nil;
}
// Hold onto this point
[linePoints addObject:[NSValue valueWithCGPoint:touchPoint]];
}
}
내가 금전적 보상없이 마이너리티 리포트 - 억양 카메라 마술 코드를 작성하고 있지 않다.
아래로 투표 할 때 일종의 설명을하는 것이 일반적입니다. – ryanprayogo
@raaz 사용자의 손가락이 유리에 닿지 않으면 추적 할 수 없습니다. 글쎄, 당신이 카메라로 몇 가지 마이너리티 리포트 - 에스 케야 마술을 구현하지 않는 한,하지만 그것은 거의 기념비적 인 노력 가치가 있다고 생각합니다. 나머지는 쉽게 달성 할 수 있습니다 : @ UTouch의 정보 (UIBezierPath의 포인트)에 'UITouch'정보를 퍼널하십시오. –