【发布时间】:2014-08-19 15:58:13
【问题描述】:
我正在尝试在 Set Card Game 中绘制曲线。输出甚至不接近我想要的。我应该如何改进绘图?
- 请忽略“我想要什么”图片中的阴影。我已经想出了如何做到这一点。问题是如何画出波浪线的形状
- 这样做的目的是练习使用objective-c 进行绘图。所以在这里只使用png图片不是解决方案......
..
#define SQUIGGLE_CURVE_FACTOR 0.5
- (UIBezierPath *)drawSquiggleAtPoint:(CGPoint)point
{
CGFloat dx = self.bounds.size.width * SYMBOL_WIDTH_RATIO / 2;
CGFloat dy = self.bounds.size.height * SYMBOL_HEIGHT_RATIO / 2;
UIBezierPath *path = [[UIBezierPath alloc] init];
CGFloat dsqx = dx * SQUIGGLE_CURVE_FACTOR;
CGFloat dsqy = dy * SQUIGGLE_CURVE_FACTOR;
[path moveToPoint:CGPointMake(point.x - dx, point.y)];
[path addQuadCurveToPoint:CGPointMake(point.x - dsqx, point.y + dsqy) controlPoint:CGPointMake(point.x - dx, point.y + dy + dsqy)];
[path addCurveToPoint:CGPointMake(point.x + dx, point.y) controlPoint1:point controlPoint2:CGPointMake(point.x + dx, point.y + dy * 2)];
[path addQuadCurveToPoint:CGPointMake(point.x + dsqx, point.y - dsqy) controlPoint:CGPointMake(point.x + dx, point.y - dy - dsqy)];
[path addCurveToPoint:CGPointMake(point.x - dx, point.y) controlPoint1:point controlPoint2:CGPointMake(point.x - dx, point.y - dy * 2)];
return path;
}
- 我得到了什么:
- 我想要什么:
最终版本
- (UIBezierPath *)drawSquiggleAtPoint:(CGPoint)point
{
CGSize size = CGSizeMake(self.bounds.size.width * SYMBOL_WIDTH_RATIO, self.bounds.size.height * SYMBOL_HEIGHT_RATIO);
UIBezierPath *path = [[UIBezierPath alloc] init];
[path moveToPoint:CGPointMake(104, 15)];
[path addCurveToPoint:CGPointMake(63, 54) controlPoint1:CGPointMake(112.4, 36.9) controlPoint2:CGPointMake(89.7, 60.8)];
[path addCurveToPoint:CGPointMake(27, 53) controlPoint1:CGPointMake(52.3, 51.3) controlPoint2:CGPointMake(42.2, 42)];
[path addCurveToPoint:CGPointMake(5, 40) controlPoint1:CGPointMake(9.6, 65.6) controlPoint2:CGPointMake(5.4, 58.3)];
[path addCurveToPoint:CGPointMake(36, 12) controlPoint1:CGPointMake(4.6, 22) controlPoint2:CGPointMake(19.1, 9.7)];
[path addCurveToPoint:CGPointMake(89, 14) controlPoint1:CGPointMake(59.2, 15.2) controlPoint2:CGPointMake(61.9, 31.5)];
[path addCurveToPoint:CGPointMake(104, 15) controlPoint1:CGPointMake(95.3, 10) controlPoint2:CGPointMake(100.9, 6.9)];
[path applyTransform:CGAffineTransformMakeScale(0.9524*size.width/100, 0.9524*size.height/50)];
[path applyTransform:CGAffineTransformMakeTranslation(point.x - size.width/2 - 3 * size.width /100, point.y - size.height/2 - 8 * size.height/50)];
return path;
}
【问题讨论】:
-
有多少种不同的曲线?似乎将一些 .png 文件添加到每个 .png 都是不同的曲线的项目中会更容易。
-
@user3386109 感谢您的建议。这样做的目的是在 iOS 中练习绘图。我会提出这个问题来澄清这一点。
-
您可能希望根据最小或最大尺寸同时缩放 x 和 y,这样您就不会失去比例。
标签: objective-c drawing cs193p