2012-07-13 23 views
7

Belirli bir satır parametresiyle bir kez çizmem gereken karmaşık bir UIBezierCurve var ve daha sonra diğer satır parametrelerine bindirme olarak tekrar çiziyorum ama aynı zamanda eğrinin son kısmına da öncekinden biraz daha kısa olacak şekilde ihtiyacım var. UIBezierPath'in bağımsız bir kopyasını aldınız mı?

Ben addLineToPoint: tarafından eğriyi oluşturmak istiyorum Bunu yapmak için son kısmına kadar moveToPoint:, o zaman bu eğrinin bir kopyasını yapmak ve orijinal ve kopyalanan eğrileri farklı hattın son segmentler ekleyin. Ve sonra orijinal eğimi ve kopyalananı inmeye başladım. Sorun, beklediğim gibi çalışmadığıdır. copyCurve de uygulanır,

UIBezierPath* copyCurve = [originalCurve copy]; 

Ve bundan sonra originalCurve yapmak çizim, bu yüzden, bu eğriler herhangi biri için bağımsız bir çizim yapamaz: I ile eğri bir kopyasını yaratır.

Orijinal ile kopya arasındaki bu bağlantının sebebi nedir ve nasıl kurtulabilirim?

DÜZENLEME 1: buldum Bir çözüm aşağıdaki şekilde kopya oluşturmaktır : Bu düzgün çalıştığı için

UIBezierPath* copyCurve=[UIBezierPath bezierPathWithCGPath:CGPathCreateMutableCopy(originalCurve.CGPath)]; 

, belki sorun ben almak kopya değişmezliği olduğunu

[originalCurve copy] 
+0

Öyle mi 'alloc' /' init 'copyCurve? – Dustin

+0

Hayır, sadece soruma yazılan şey ... – BartoNaz

cevap

19

CGPath'i kullanarak yeni, aynı yolu oluşturun.

path2 = [UIBezierPath bezierPathWithCGPath:path1.CGPath]; 

CGPath özelliği dokümanlar şunlar belirtilmiştir:

Bu özellik, zaman içinde herhangi bir noktada yolunun bir anlık içerir. Bu özelliğin elde edilmesi, Çekirdek Grafik işlevlerine geçirebileceğiniz değişmez bir yol nesnesi döndürür. Kullanabileceğimiz Alternatif

: - -: Ayrıca

+0

Lütfen, benim sorularımı düzenleyin. Görünmüyor ki, değişmez yol nesnesini değiştiremeyeceğim, muhtemelen muhtemelen değişebilir olana ihtiyacım var. – BartoNaz

+2

CGPath'i değiştiremezsiniz, ancak CGPath ile yapılan UIBezierPath nesnesi değişebilir. – jrturton

+0

Hayır, özür dilerim. Gerçekten çalışıyor. Teşekkür ederim! – BartoNaz

2

cevap @jrturton için

let path = UIBezierPath(ovalIn: pathRect) 
let newPath = path.cgPath.copy(strokingWithWidth: strokeWidth, lineCap: .butt, lineJoin: .miter, miterLimit: 0) 

enter image description here

Reference

+0

hızlıca güncellemek 3 güncellemek için storkedArc = arc.copy (strokingWithWidth: 5.0, lineCap: .butt, lineJoin: .miter, miterLimit: 10) –

İlgili konular