2017-08-05 48 views
1

我使用Paintcode V3和最後一個Xcode作爲我的項目。如何訪問UIView自定義類中的圖層使用Paintcode生成?

在Paintcode中,我畫了一條紅色的路徑,一種帶有半徑變量的「鍾針」,可以旋轉它。

enter image description here

在我的Xcode項目,這個自定義的UIView添加到主視圖。

當紅色路徑旋轉時,我需要知道它何時與視圖的另一個元素相交。

我想:

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

但它不能正常工作,因爲redPathView是整個Paintcode畫布(方形框架),而不是隻有紅色路徑。

我正在尋找一種方法來訪問我的視圖的紅色路徑。

回答

0

有趣的問題。

我不認爲有一種方法可以做的正是你在找什麼...
就像你提到的,當我們使用PaintCode,我們的圖紙定做成爲整個UIView
我們無法訪問其特定元素(如您的redPathView)。

(我加入最愛這個問題的情況下,任何人都知道,如果我們其實可以。我可能是錯的。)

反正有解決方法。您可以使用PaintCode自己告訴你何時發生「碰撞」。當然,那麼你需要把所有東西都畫出來......並且實施一些對你有意義的內部控制。

例如,在下面的圖片中,我創建了這個「時鐘指針」,它具有檢測紅色物體何時觸及其他UI元素的功能(關鍵點有touchedElementID表達式 - 觀察它如何使用「ID 「的矩形):

paintCode

有一些問題,你可以用這種方法發現,例如需要知道屏幕上的其他元素,可能比較複雜的三元結構類似的確切位置:

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

另外,如何「導出」並將這些信息與Xcode中的StyleKit一起使用?

我做的訣竅是添加一個空(沒有Fill,沒有Stroke)在PaintCode UI元件和touchedElementID表達結果向元件的alpha值相關聯。

這樣我就可以在我的自定義視圖中訪問表達式,例如通過StyleKit.touchedElementID。但是這會引入一個新問題,因爲現在每次導出時都必須更改生成的StyleKit(兩行代碼,但仍然存在)。這是一種脆弱的解決方案。

但是,如果您沒有問題這一點,那麼它只是一個我創建了一個協議,消耗這個新的信息的事...
對於這一點,所以我ViewController可以作爲我的自定義視圖的委託行爲,並執行無論它在PaintCode中最內部的UI元素「被觸摸」時需要做什麼。

下面是最終的結果:

iOS

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

+0

確定您的解決方案可能適用於我預期的一點「每次導出時都必須更改生成的StyleKit」。我始終使用PaintCode,並且我相信我會忘記添加2行...我將嘗試另一種解決方案,也許沒有PaintCode。謝謝 – cmii

+0

是的,我也使用PaintCode。你的擔心是可以理解的。 :-) –

相關問題