我想創建一個簡單的數獨網格。事情是這樣的: http://i1-mac.softpedia-static.com/screenshots/31-3-33_1.png在iPhone上繪製網格或使用圖像
是它創建網格的圖像和背景圖像的使用,然後制定出關於這個我的號碼一個好主意,或者我應該使用OpenGL或東西畫網格?
如果使用圖像,什麼尺寸是否合適?
如果OpenGL的,怎麼做呢?
問候 萊納斯
我想創建一個簡單的數獨網格。事情是這樣的: http://i1-mac.softpedia-static.com/screenshots/31-3-33_1.png在iPhone上繪製網格或使用圖像
是它創建網格的圖像和背景圖像的使用,然後制定出關於這個我的號碼一個好主意,或者我應該使用OpenGL或東西畫網格?
如果使用圖像,什麼尺寸是否合適?
如果OpenGL的,怎麼做呢?
問候 萊納斯
保持簡單。不需要OpenGL。除非你想要瘋狂的動畫,否則背景圖像對於suduku網格來說可以很好地工作。
你也離開了CoreGraphics中作爲一個選項...這將適合介於兩者之間的背景圖像和OpenGL中的靈活性和易用性方面仍然.... ...背景圖片是那麼容易我不知道你爲什麼不會使用它。請注意,您需要支持iPad(1024 x 768),iPhone 4視網膜顯示屏(640 x 960)和iPhone(320 x 480)...還可以顯示狀態欄或其他用戶界面元素,你需要考慮到這一點。這些元素的大小被記錄並廣泛可用。
圖像(在圖像視圖中設置)可能是最簡單的解決方案,但更好的選擇是創建一個UIView子類,並通過覆蓋drawRect:
來處理繪圖(如果沒有其他您不必處理加載背景圖像的內存開銷)。 OpenGL會過度殺傷,但Quartz 2D繪圖(CoreGraphics的一部分)很簡單,並且在這裏可以很好地工作。看看CGContextMoveToPoint(),CGContextAddLineToPoint(),CGContextStrokePath()和相關的方法。你必須做一些工作來正確佈局網格(特別是如果你想支持多個設備/方向),但是圖形本身不應該佔用太多的代碼。
我會扔在另一種可能的解決方案:使用CoreAnimation。在數獨網格的情況下,您可以爲每個數字使用一個CATextLayer
。然後,您可以使用圖層的borderWidth
屬性來獲取網格圖層的邊框。
另一種可能的解決方案是通過將圖像設置爲該圖層的content
屬性或使用drawInContext:(CGContextRef)ctx
方法中的CoreGraphics自行繪製網格來繪製網格的根層。然後將您的號碼添加爲CATextLayers
。很酷的事情是,你現在可以輕鬆淡入或淡出數字。您還可以通過設置CATextLayer
的backgroundColor
屬性來更改每個單獨字段的背景。
一如往常:TIMTOWTDI。
謝謝@GorillaPatch。現在我只是用網格創建了一個.png圖像。現在我試圖把這些數字放在正確的地方。我有我的所有數字在一個NSMutableArray。我通過這個循環,但我不能重複使用相同的CATextLayer,因爲它會被覆蓋。我試圖做這樣的:http://snipt.net/Linuus/nothing?key=3e47b75000b0924b6c9ba5759a7cf15d我這裏不計算數字的配售,但它只是一個測試。只有最後一個字符會被打印出來,因爲每次都會被覆蓋... – Linus 2011-05-26 23:04:38
答案很簡單:您只是不回收CATextLayers。你必須爲每個數字創建一個新的文本層。這些圖層對象非常輕便,因此如果繪製81個圖層,它不應該影響您的性能。然而在iOS中,UIViews也是CALayers的一個相對封裝。因此,如果您對UITextFields感覺更加舒適,那麼只需嘗試一下並使用CoreAnimation工具來分析您的應用,即可檢查幀速率。如果您需要優化您可以隨時下一步更低級別。 – GorillaPatch 2011-05-27 14:27:05
謝謝!它似乎工作 – Linus 2011-05-27 18:23:38