我一直在尋找this thread,因爲我試圖實現同樣的事情。但是,我發現Canvas類是作爲UIImageView的子類實現的。我試圖做同樣的事情,除了在UIView。如何使用UIView而不是UIImageView影響此解決方案的實施?我看到self.image
使用了幾次,但我不知道如何改變,因爲我不認爲這在通用UIView中可用。Swift:在UIView中繪製基於觸摸的UIBezierPath
0
A
回答
0
在回答這個問題時,首先將self.image繪製到繪圖上下文中,然後將繪圖應用到頂部,最後將圖像更新爲舊圖像,並在頂部繪製新內容。
既然你只是想添加一個UIBezierPath,我只需要創建一個CAShapeLayer,放入你的bezier路徑,並將它放在你的視圖背景層(self.view.layer)之上。 DrawRect不需要做任何事情。
0
是的,您可以將其作爲UIView
子類實現。您的模型應該保存觸摸事件的位置(或從這些位置構建的路徑),然後該視圖的drawRect
可以呈現這些路徑。或者,您也可以創建與這些路徑關聯的對象CAShapeLayer
。兩種方法都很好。
注意,有一些優點,以使快照的方法(保存爲UIImage
)對象,你在UIImageView
或手動兩種顯示繪製你的UIView
子類的drawRect
。隨着您的繪圖變得越來越複雜,如果您的drawRect
必須重新繪製所有路徑段(因爲與單個屏幕手勢相關聯的觸摸很多,所以它可能會驚人地快速變爲數千個位置),您將開始遇到性能問題。一觸即發。恕我直言,我認爲你引用的其他答案太過分了,每創建一個新快照touchesMoved
。當您查看Retina iPad或iPhone 6 plus的全分辨率圖像時,這是在每次觸摸事件時創建的大圖像快照。我個人採用混合方式:我的drawRect
或CAShapeLayer
將呈現與當前手勢相關聯的當前路徑(或touchesBegan
和touchesEnded
之間的touchesMoved
事件的集合),但是當手勢完成時,它將創建新的快照。
相關問題
- 1. 如何使用UIBezierPath在可可觸摸中繪製多邊形
- 2. 在swift中使用UIBezierPath繪製形狀
- 3. UIBezierPath中風在觸摸中重繪多次
- 4. 基於CGPoint在屏幕上繪製UIView
- 5. 如何在UIView上觸摸移動繪製任意路徑
- 6. 在可可觸摸中實現基於觸摸的旋轉
- 7. 在ColorPicker UIView上限制觸摸 - iOS
- 8. 檢測上UIBezierPath中風觸摸,不填
- 9. iOS基於Swift Time的線條繪製
- 10. 基於Swift中的觸摸正確地移動Sprite
- 11. 獲取位於觸摸位置的uiview
- 12. Lua Gideros:繪製觸摸線
- 13. 在基於動畫CGPoint的UIView中繪製一條線。
- 14. UIBezierPath平滑曲線手指觸摸繪圖
- 15. Swift iOS - 檢測觸摸拖動從外部輸入UIView UIView
- 16. 當我觸摸UIVIew
- 17. 在UIView上觸摸事件
- 18. 使用UIBezierPath繪製圓角使用UIBezierPath
- 19. UIView:如何專門限制觸摸
- 20. UIView中的UIBezierPath動畫
- 21. 多的UIView與UIBezierPath
- 22. 旋轉時的觸摸繪製
- 23. 真實圖像或繪圖在UIView移動與觸摸?
- 24. 用UIView繪製漸變畫()用swift
- 25. 可可觸摸 - 用觸摸點繪製核心圖形
- 26. 用UIBezierPath繪製一條線
- 27. 繪製餅圖與UIBezierPath
- 28. iOS - 檢測UIView中的觸摸?
- 29. UIView子類,觸摸事件
- 30. UIView觸摸位置座標
如果我使用UIImage並製作快照,我可以編輯已繪製的形狀嗎?這聽起來對我來說,如果他們是在一個圖像中,他們不會被編輯,我只能在他們之上畫更多的東西,而不會刪除我已經繪製的任何東西。這是我想要做的一個關鍵功能,所以如果這是不可能的,我必須用UIView來完成。 – NumberOneRobot 2014-12-01 20:10:22
顯然,快照將不可編輯(當然,超出像素編輯)。但是,如果保留用於生成該快照的模型對象(例如路徑),則可以編輯模型,然後在理論上隨時重新生成快照。因此,我建議快照不是模型(正如其他問題的接受答案似乎暗示的那樣),而只是一種渲染優化,可以避免每次更新模型時重新繪製所有舊路徑。 – Rob 2014-12-01 20:36:42
因此,保存一張圖片,也許每次我創建一個新的貝塞爾路徑,然後每次添加一條新路徑時,我都會從圖像和路徑創建一個新圖像?那麼,而不是必須重新渲染具有巨大潛在點數的貝塞爾路徑,而是隻需渲染圖像,它只是指定的像素? – NumberOneRobot 2014-12-01 20:48:10