小编hel*_*gma的帖子

如何使用swift清除和重绘UIView(存在于视图控制器中)的内容?

我有一个UIView内部View Controller,我正在绘制我的应用程序所需的几行.经过一段时间后,我希望其中一些线条消失,其他一些线条出现在同一视图中.我现在使用的方法是我正在清除UIView并重新绘制我想要在更新视图中绘制的所有线条.

有人能告诉我什么是正确的方法吗?我已经经历了各种听起来相似的问题,但它没有多大帮助.直到现在我尝试过这样的事情: -

outletView.setNeedsDisplay()
Run Code Online (Sandbox Code Playgroud)

let context = UIGraphicsGetCurrentContext()
context?.clear(outletView.frame)
Run Code Online (Sandbox Code Playgroud)

这些似乎没有任何区别.

如果我viewDidLoad()再次打电话,因为所有线路现在都已更新.要绘制的新线条会出现,但应该消失的线条不会消失.行的变量被正确更新,因为我有其他逻辑检查行变量的值在更新应该发生后工作正常.唯一的问题是重绘部分.事实上,如果我理解正确,问题只是清理旧的uiview内容.如果清洁正常进行,重绘viewDidLoad将显示正确的线条绘制.

PS我知道viewDidLoad()明确打电话不是一个好习惯.希望找到解决此问题的方法,而无需再次调用viewDidLoad.

iphone xcode uiview ios swift

4
推荐指数
1
解决办法
4284
查看次数

如何在iOS swift中为多个按钮使用相同的segue?

我的 iOS 应用程序中有大约 20 个按钮,它们与同一个 UIViewController 相连。这是一个用 Swift 编写的游戏。为了实现这一点,我在 Storyboard 中为第一个按钮创建了一个 segue。对于其余的按钮,我将它们附加到相同的 IBAction 方法并使用它的 ID 调用上面创建的 segue。这种方法的问题在于,对于第一个按钮,应用程序尝试执行 2 次 segue 并在日志中抛出一个错误,指出 UIView: 0x7f7fe9c84600; 帧 = (0 0; 320 568); 自动调整大小 = W+H; layer = CALayer: 0x7f7fe9c848d0>> 的窗口不等于 TileGame.GameScreen: 0x7f7fe9dc6bc0> 的视图窗口!使用起来并不是真正的问题,但我想这不是正确的做事方式。另外,它增加了不必要的日志记录。

下面是我的 IBAction 代码

@IBAction func action(_ sender: Any) {
    performSegue(withIdentifier: "segueToSecondScreen", sender: self)
}
Run Code Online (Sandbox Code Playgroud)

有人对如何处理这个问题有任何建议吗?任何帮助表示赞赏。

iphone xcode ios segue swift

4
推荐指数
1
解决办法
2509
查看次数

标签 统计

ios ×2

iphone ×2

swift ×2

xcode ×2

segue ×1

uiview ×1