2017-08-05 11 views
1

私は自分のプロジェクトにPaintcode V3と最後のXcodeを使用しています。Paintcodeを使用してUIViewカスタムクラス内のレイヤーにアクセスするにはどうすればよいですか?

ペイントコードでは、回転することができるように、半径変数で「時計の手」のような赤いパスを描画します。私のXcodeプロジェクトで

enter image description here

、このカスタムUIViewのは、メインビューに追加されます。

赤いパスが回転しているとき、私はそれがビューの他の要素と交差するときを知る必要があります。

私が試み:

if self.redPathView.frame.intersects(self.anotherView.frame) {  
    //do something...     
} 

をけれどもredPathView全体Paintcodeキャンバス(四角枠)だけでなく赤パスであるため、それが動作することができません。

私は自分のビューの赤いパスにアクセスする方法を探しています。

答えて

0

興味深い問題です。

我々はPaintCodeを使用する場合、私はあなたが探している正確に何をすべきか方法があるとは思わない...
あなたが言及したように、私たちのカスタム図面が全体UIViewなります。
特定の要素(redPathViewなど)にはアクセスできません。

(私たちは実際に。私が間違っている可能性がありますことができれば、誰もが知っている場合には、私はこの質問をお気に入りへの追加しています。)とにかく

、回避策があります。 PaintCode自体を使用して、「衝突」が発生したときに通知することができます。もちろん、そこにすべてを描画する必要があります。そして、あなたに合った何らかの内部統制を実装します。

例えば、以下の図では、赤いものが他のUI要素に触れたときに検出する機能を備えたこの「時計の手」を作成しました(キーポイントにはtouchedElementIDという表現があります) ")の長方形の:

paintCode

例えば、あなたがこのアプローチを見つけるかもしれないいくつかの問題は、画面上の他の要素の正確な位置を知る必要など、おそらく複雑な三元構造があります。

(rotationSanitized <= -352 || rotationSanitized >= -8) ? 
1 : 
(rotationSanitized <= -82 && rotationSanitized >= -98) ? 
2 : 
(rotationSanitized <= -172 && rotationSanitized >= -188) ? 
3 : 
(rotationSanitized <= -262 && rotationSanitized >= -278) ? 
4 : 0 

また、XcodeのStyleKitと一緒にこの情報を「エクスポート」し、消費する方法は?私は

トリックPaintCodeに空(無Fill、無Stroke)UI要素を追加し、要素のalpha値にtouchedElementID式の結果を関連付けることでした。

このようにして、私は自分のカスタムビュー内の式にアクセスすることができます。たとえば、StyleKit.touchedElementIDを使用します。しかし、今度は、それがエクスポートされるたびに(2行のコードが、それでも)生成されたStyleKitを変更する必要があるので、新しい問題が発生します。それは壊れやすい解決策のようなものです。そのために、あなたはそれでOKですしかし、もし、それがちょうどこの新しい情報を消費する問題です

...
私はプロトコルを作成したので、私のViewControllerは私のカスタムビューのデリゲートとして機能し、実行することができますPaintCode内の最も内部的なUI要素が「タッチ」されたときに必要な処理は何でも可能です。

iOS

最後に、check this project in GitHub with all the code and samples

はここで最終的な結果です。

+0

OKあなたのソリューションは、私が期待するところでは「生成されたStyleKitをエクスポートするたびに変更する必要があります」と予想されます。私はいつもPaintCodeを使用していますが、私は2行を追加することを忘れてしまいます。私はPaintCodeを使わずに別の解決策を試すつもりです。ありがとう – cmii

+0

ええ、私も多くのPaintCodeを使用します。あなたの懸念は理解できます。 :-) –

関連する問題