興味深い問題です。
我々はPaintCodeを使用する場合、私はあなたが探している正確に何をすべきか方法があるとは思わない...
あなたが言及したように、私たちのカスタム図面が全体UIView
なります。
特定の要素(redPathView
など)にはアクセスできません。
(私たちは実際に。私が間違っている可能性がありますことができれば、誰もが知っている場合には、私はこの質問をお気に入りへの追加しています。)とにかく
、回避策があります。 PaintCode自体を使用して、「衝突」が発生したときに通知することができます。もちろん、そこにすべてを描画する必要があります。そして、あなたに合った何らかの内部統制を実装します。
例えば、以下の図では、赤いものが他のUI要素に触れたときに検出する機能を備えたこの「時計の手」を作成しました(キーポイントにはtouchedElementID
という表現があります) ")の長方形の:
例えば、あなたがこのアプローチを見つけるかもしれないいくつかの問題は、画面上の他の要素の正確な位置を知る必要など、おそらく複雑な三元構造があります。
(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要素が「タッチ」されたときに必要な処理は何でも可能です。
最後に、check this project in GitHub with all the code and samples:
はここで最終的な結果です。
OKあなたのソリューションは、私が期待するところでは「生成されたStyleKitをエクスポートするたびに変更する必要があります」と予想されます。私はいつもPaintCodeを使用していますが、私は2行を追加することを忘れてしまいます。私はPaintCodeを使わずに別の解決策を試すつもりです。ありがとう – cmii
ええ、私も多くのPaintCodeを使用します。あなたの懸念は理解できます。 :-) –