gpt4 book ai didi

ios - 在 Swift 中调用绘图函数

转载 作者:行者123 更新时间:2023-11-28 07:04:12 25 4
gpt4 key购买 nike

我的 Draw2D 类中有以下代码,它附加到 View Controller 中的 View 。

在 View Controller 中我有一个 var Drawing = Draw2D()。我连接了一个按钮,它使用 self.Drawing.Check() 执行“检查”功能。问题是我无法在屏幕上显示该行。正如我在 println() 中看到的那样,椭圆工作正常并且函数 Check 执行良好。怎么了?

import UIKit

class Draw2D: UIView {

override func drawRect(rect: CGRect) {
let context = UIGraphicsGetCurrentContext()
CGContextSetLineWidth(context, 4.0)
CGContextSetStrokeColorWithColor(context, UIColor.blueColor().CGColor)
let rectangle = CGRectMake(60,170,200,80)
CGContextAddEllipseInRect(context, rectangle)
CGContextStrokePath(context)
}

func Check() {
let context = UIGraphicsGetCurrentContext()
CGContextSetLineWidth(context, 2.0)
CGContextMoveToPoint(context, CGFloat(100), CGFloat(300))
CGContextAddLineToPoint(context, CGFloat(100 + 200), CGFloat(300 + 100))
CGContextStrokePath(context)
}
}

最佳答案

您对 Check() 的调用在常规渲染循环之外 - 我真的不知道在那种情况下 UIGraphicsGetCurrentContext() 实际返回什么。我猜它会返回 nil:

The current graphics context is nil by default. Prior to calling its drawRect: method, view objects push a valid context onto the stack, making it current.

无论如何,这不会改变您不能只调用 Check() 并期望该行被呈现的事实。暂时假设该行已实际渲染:在下一次渲染迭代中,您将再次只执行 drawRect 中编写的内容,因此不会再次显示该行。

您需要做的是在 drawRect 中创建某种逻辑以确定是否调用 Check()

执行此操作的可能方法如下:

class Draw2D: UIView {

var callCheck:Bool? // changing it to Bool! or Bool will change the required check a few lines below

override func drawRect(rect: CGRect) {
let context = UIGraphicsGetCurrentContext()
CGContextSetLineWidth(context, 4.0)
CGContextSetStrokeColorWithColor(context, UIColor.blueColor().CGColor)
let rectangle = CGRectMake(60,170,200,80)
CGContextAddEllipseInRect(context, rectangle)
CGContextStrokePath(context)
if callCheck != nil && callCheck! {
Check()
}
}

func Check() {
let context = UIGraphicsGetCurrentContext()
CGContextSetLineWidth(context, 2.0)
CGContextMoveToPoint(context, CGFloat(100), CGFloat(300))
CGContextAddLineToPoint(context, CGFloat(100 + 200), CGFloat(300 + 100))
CGContextStrokePath(context)
}
}

改变你的IBAction:

@IBAction func Button1(sender: AnyObject) { 
self.Drawing.callCheck = true
self.Drawing.setNeedsDisplay()
}

关于ios - 在 Swift 中调用绘图函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31221034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com