UibezierPathおよびApply Transform
-
26-10-2019 - |
質問
基本的にパイメニュー(スライスに分割されたケーキのようなもの)であるカスタムUIViewを実装しようとしています。
そのために、チャートのホイールの光線のように、中心から円と一連の線を描画しようとしています。
私はサークルを描きました、そして、私は今、円をスライスで分割する線を描きたいと思います。
これは私がこれまでに持っているものです:
-(void)drawRect:(CGRect)rect{
[[UIColor blackColor] setStroke];
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGFloat minDim = (rect.size.width < rect.size.height) ? rect.size.width : rect.size.height;
CGRect circleRect = CGRectMake(0, rect.size.height/2-minDim/2, minDim, minDim);
CGContextAddEllipseInRect(ctx, circleRect);
CGContextSetFillColor(ctx, CGColorGetComponents([[UIColor yellowColor] CGColor]));
CGContextFillPath(ctx);
CGPoint start = CGPointMake(0, rect.size.height/2);
CGPoint end = CGPointMake(rect.size.width, rect.size.height/2);
for (int i = 0; i < MaxSlices(6); i++){
CGFloat degrees = 1.0*i*(180/MaxSlices(6));
CGAffineTransform rot = CGAffineTransformMakeRotation(degreesToRadians(degrees));
UIBezierPath *path = [self pathFrom:start to:end];
[path applyTransform:rot];
}
}
- (UIBezierPath *) pathFrom:(CGPoint) start to:(CGPoint) end{
UIBezierPath* aPath = [UIBezierPath bezierPath];
aPath.lineWidth = 5;
[aPath moveToPoint:start];
[aPath addLineToPoint:end];
[aPath closePath];
[aPath stroke];
return aPath;
}
問題は、パス上のApplyTransformが何もしないように見えることです。最初のパスは正しく描かれ、次のパスは回転の影響を受けません。基本的に私が見ているのは、1つのパスです。ここでスクリーンショットを確認してください http://img837.imageshack.us/img837/9757/iossimulatorscreenshotf.png
ご協力ありがとうございました!
解決
あなたは道を描いています(で stroke
)あなたがそれを変換する前に。パスは単なる数学的表現です。 「画面上」の行ではありません。それに関するデータを変更することで、すでに描いたものを移動することはできません。
移動するだけです [aPath stroke]
out pathFrom:to:
そして、それを後に置きます applyTransform:
.
所属していません StackOverflow