【问题标题】:UIKit controls for a sudoku grid?数独网格的 UIKit 控件?
【发布时间】:2011-03-21 09:25:50
【问题描述】:

我最近用 C 语言完成了一个算法数独求解器,其中采用了三种不同的方法来解决这个难题。这是我为 Project Euler 解决方案编写的一段代码。蛮好玩的,我可以补充一下……

Anywho,所以我真的很想将这个小求解器放入 iPhone 应用程序中。我真的不知道要采取什么方法来让网格在屏幕上显示。我能想象的最糟糕的方式是为 81 个单独的 UITextFields 提供 81 个单独的网点……在可可应用程序中,我只需将它们嵌入到 NSMatrix 中即可,但 iPhone 上没有 NSMatrix 的替代品。

我现在正在考虑生成一个 HTML 文件并将其显示在 UIWebView 中,但即使这样似乎也不是解决此问题的最佳方法。你会推荐什么?

【问题讨论】:

    标签: iphone uikit grid sudoku nsmatrix


    【解决方案1】:

    我会从一些非常简单的东西开始:一个 UIView 子类,它有一个 81 个元素的数组,并且知道如何通过在其 drawRect: 调用中绘制或通过在 layoutSubviews 中添加子视图或子层来将其呈现为 9x9 网格。在数组索引和网格矩形之间映射应该很容易。此视图还可以绘制您想要的任何背景网格/线条。

    【讨论】:

    • 这听起来是个好主意。我以前也从未以这种方式对 UIView 进行子类化,这将是一次很棒的学习体验。有没有关于如何去做这件事的好指南?我的两本 iPhone 书籍没有关于任何东西的子类化......
    • 这真的很简单,就像创建一个 UIView 子类(Xcode 在添加新文件时有一个模板),然后将一些绘图代码放入 -drawRect: 方法中。对于绘图,您可以查看 UIBezierPath 来创建网格,并且 NSString 有一些用于绘制文本的便捷方法。或者您可以下拉到 CoreGraphics/Quartz 以获取一些额外的绘图 API。如果您走这条路,那么 Quartz 2d 编程指南是一个很好的起点。
    • 谢谢!我现在自己绘制了网格图,并且开始绘制文本...您建议使用将 UILabel 作为子视图放置,还是使用 CoreGraphics 绘制文本?在这两种情况下,我都希望文本在框中垂直和水平居中。我如何找出一串字符(一个数字)的宽度和高度?
    • 您可能想查看 NSString UIKit Additions 类别,它具有计算给定矩形内的大小和绘制字符串的方法。如果您不介意管理其中的 81 个子视图,也可以添加 UILabel 子视图。
    • 杰森,非常感谢您的帮助。我现在有一个工作的数独网格。我已经在一个 CGLayer 中设置了网格,在另一个 CGLayer 中设置了数字,如果在调用 draw rect 时它们中的任何一个为 nil,它们就会被绘制,如果数字需要更新,也可以重新绘制 Numbers 层。一个蓝色方块可以从一个方块移动到另一个方块,然后绘制两个图层。网格甚至可以检测触摸事件并移动选定的方块,并且视图在选定的空间接受变化的数字。我什至已经大致解决了:D 再次感谢!
    【解决方案2】:

    编写自己的专用 UI​​View 并自己绘制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-17
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多