내 그림에 "엠 보스/그림자 효과"를 구현하는 데 문제가 있습니다. 모든 방법과코어 그래픽 (손가락 페인트 용)을 사용하여 엠보싱 또는 그림자 효과를 만드는 방법
편집 코드 : 핑거 페인트 기능은 현재 아래에있는 내 사용자 정의 UIView
와 함께 잘 작동하고 나의 drawRect
방법 코드 나는 점 페인트 효과를 얻고이를 구현 한
- (void)drawRect:(CGRect)rect
{
CGPoint mid1 = midPoint(previousPoint1, previousPoint2);
CGPoint mid2 = midPoint(currentPoint, previousPoint1);
CGContextRef context = UIGraphicsGetCurrentContext();
[self.layer renderInContext:context];
CGContextMoveToPoint(context, mid1.x, mid1.y);
CGContextAddQuadCurveToPoint(context, previousPoint1.x, previousPoint1.y, mid2.x, mid2.y);
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetLineWidth(context, self.lineWidth);
CGContextSetStrokeColorWithColor(context, self.lineColor.CGColor);
CGContextSaveGState(context);
// for shadow effects
CGContextSetShadowWithColor(context, CGSizeMake(0, 2),3, self.lineColor.CGColor);
CGContextStrokePath(context);
[super drawRect:rect];
}
CGPoint midPoint(CGPoint p1, CGPoint p2)
{
return CGPointMake((p1.x + p2.x) * 0.5, (p1.y + p2.y) * 0.5);
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
previousPoint1 = [touch previousLocationInView:self];
previousPoint2 = [touch previousLocationInView:self];
currentPoint = [touch locationInView:self];
[self touchesMoved:touches withEvent:event];
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
previousPoint2 = previousPoint1;
previousPoint1 = [touch previousLocationInView:self];
currentPoint = [touch locationInView:self];
// calculate mid point
CGPoint mid1 = midPoint(previousPoint1, previousPoint2);
CGPoint mid2 = midPoint(currentPoint, previousPoint1);
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, mid1.x, mid1.y);
CGPathAddQuadCurveToPoint(path, NULL, previousPoint1.x, previousPoint1.y, mid2.x, mid2.y);
CGRect bounds = CGPathGetBoundingBox(path);
CGPathRelease(path);
CGRect drawBox = bounds;
//Pad our values so the bounding box respects our line width
drawBox.origin.x -= self.lineWidth * 2;
drawBox.origin.y -= self.lineWidth * 2;
drawBox.size.width += self.lineWidth * 4;
drawBox.size.height += self.lineWidth * 4;
UIGraphicsBeginImageContext(drawBox.size);
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
curImage = UIGraphicsGetImageFromCurrentImageContext();
[curImage retain];
UIGraphicsEndImageContext();
[self setNeedsDisplayInRect:drawBox];
}
도트 점 ...
아래 이미지 (그림자 또는 엠보싱 효과가 없음)를 참조하십시오. 이러한 효과를 추가하는 방법에 대한 아이디어가 있다면 제게 제안 해주십시오. 어떻게 해결할 수 있습니까?
귀하의 제안에 감사드립니다. 나는 UIBezierPath를 사용하여 구현했지만 기능을 지우는 것과 같은 몇 가지 문제에 직면하고 다른 색상의 페인트를 선택합니다. 결국 마침내 모든 기능을 변경하고 CGContext를 사용합니다. 이제는 지우개와 같은 모든 기능, 브러쉬의 색상 변경이 제대로 작동합니다. 엠 보스 또는 그림자 효과를 만드는 것만 가능합니다. 그 효과가 제대로 작동하지 않습니다 .. 그림자 효과와 잘 작동하는 스트레이트 라인. 그러나 곡선 효과 (부드러운) 잘 작동하지 않습니다. CGZext를 사용하여 몇 가지 suggeetion 말해줘. – Hitarth
빠른 질문 : 지우개를 어떻게 사용 하시겠습니까? 대부분의 '그리기'프로그램은 각각의 별도 '경로'를 지 웁니다 (하나의 손가락 터치/끌기/끝 이벤트로 정의 됨). 이것은 내 제안/대답과 함께 작동합니다. 그러나 각 경로 지점이나 심지어 각 픽셀을 지우려고하는 경우 ... 달성하기가 훨씬 어려울 것입니다. –
현재 컨텍스트를 사용하여 지우기. 그리고 그것은 잘 작동합니다. – Hitarth