Swift OS X 应用程序中,当按钮被点击时改变自定义视图绘制。

3

在我的Swift OS X 应用程序中,我有一个自定义视图和一个按钮。当我启动我的应用程序时,我的视图显示一个红色的椭圆形,当我点击按钮时,我需要将该绘图更改为drawRectangle()方法。

我的自定义视图类MyView如下所示:

import Cocoa
import AppKit

class MyView: NSView {

    var isTrue = true

    override func drawRect(dirtyRect: NSRect) {
        super.drawRect(dirtyRect)

        // Drawing code here.
        if isTrue {
            DrawingMethods.drawOval()
        } else {
            DrawingMethods.drawRectangle()
        }

    }

    @IBAction func buttonPressed(sender: AnyObject) {

        isTrue = false
        // Now I need to update the view, so it draws rectangle isntead of oval. How I do that?

    }
}

我有一个名为DrawingMethods的类:

import Cocoa

public class DrawingMethods: NSObject {

    public class func drawOval() {

        let color = NSColor(calibratedRed: 1, green: 0, blue: 0, alpha: 1)
        let ovalPath = NSBezierPath(ovalInRect: NSMakeRect(64, 54, 50, 45))
        color.setFill()
        ovalPath.fill()
    }

    public class func drawRectangle() {

        let color = NSColor(calibratedRed: 1, green: 0, blue: 0, alpha: 1)
        let rectanglePath = NSBezierPath(rect: NSMakeRect(136, 12, 34, 34))
        color.setFill()
        rectanglePath.fill()
    }
}

那么我该如何让我的自定义视图绘制矩形而不是椭圆形呢?
1个回答

1
在将 isTrue = false 设置后,调用视图上的 setNeedsDisplayInRect()。这将通知视图需要重新绘制,并再次调用 drawRect
您的 buttonPressed 函数应该在包含自定义视图的 ViewController 中定义。
import Cocoa

class ViewController: NSViewController {
    @IBOutlet customView: MyView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    @IBAction func buttonPressed(sender: AnyObject) {
        customView.isTrue = false
        customView.setNeedsDisplayInRect(customView.bounds)
    }
}

或者,您可以将视图的needsDisplay属性设置为true以重新绘制整个视图:

customView.needsDisplay = true

抱歉,我在编程方面很菜,英语也不好,我不知道这个上下文中的“flag”是什么意思。我只知道“夺取‘旗帜’” :)那么我应该在我的“buttonPressed”函数中调用那个函数吗?你能否请用代码展示如何做到这一点? - Prontto
像这样吗? setNeedsDisplayInRect(<#invalidRect:NSRect#>) 我应该在括号里放什么? - Prontto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接