如何使用其他 objc 函数的变量? (长按并添加按钮)

How to use other objc function's variable? (Long Press & Add a Button)

有没有办法使用其他objc函数的变量?场景如下:当我长按视图的某个点时,会出现菜单项,当我按下添加按钮时,我想在该位置创建一个圆形按钮

//Menu Items
@objc func longPressForView(sender: UILongPressGestureRecognizer) -> CGPoint {
    if sender.state == .began {
        let menu = UIMenuController.shared
        becomeFirstResponder()

        let menuItemAdd = UIMenuItem(title: "Add", action: #selector(addCircleMenuItemAction))
        let menuItemDelete = UIMenuItem(title: "Delete", action: #selector(handleMenuItemAction))
        menu.menuItems = [menuItemAdd, menuItemDelete]

        let location = sender.location(in: sender.view)
        let menuLocation = CGRect(x: location.x, y: location.y, width: 0, height: 0)
        menu.showMenu(from: sender.view!, rect: menuLocation)

        //I tried to return this location but I don't know how to use it
        return location
    }

}
//Click Menu Items' Add Button to add a circle on that position.
@objc func addCircleMenuItemAction() {

    let longPressedlocation = longPressForView(sender: )

    print("Add item tapped")

    view.addSubview(addCircle)
    addCircle.layer.cornerRadius = CGFloat(circleAddDefaultSize/2)
    addCircle.translatesAutoresizingMaskIntoConstraints = false
    addCircle.backgroundColor = .black

    //Here is where I want to use the location to add a circle 
    addCircle.frame = CGRect(origin: longPressedlocation?????, size: CGSize(width: circleAddDefaultSize,height: circleAddDefaultSize))

您可以创建一个全局变量并在两个函数中使用它,就像这样

    //Menu Items
var location: CGPoint

@objc func longPressForView(sender: UILongPressGestureRecognizer) -> CGPoint {
    if sender.state == .began {
        let menu = UIMenuController.shared
        becomeFirstResponder()

        let menuItemAdd = UIMenuItem(title: "Add", action: #selector(addCircleMenuItemAction))
        let menuItemDelete = UIMenuItem(title: "Delete", action: #selector(handleMenuItemAction))
        menu.menuItems = [menuItemAdd, menuItemDelete]

        let location = sender.location(in: sender.view)
        let menuLocation = CGRect(x: location.x, y: location.y, width: 0, height: 0)
        menu.showMenu(from: sender.view!, rect: menuLocation)

        //I tried to return this location but I don't know how to use it
        self.location = location
        return location
    }
}
@objc func addCircleMenuItemAction() {

    print("Add item tapped")

    view.addSubview(addCircle)
    addCircle.layer.cornerRadius = CGFloat(circleAddDefaultSize/2)
    addCircle.translatesAutoresizingMaskIntoConstraints = false
    addCircle.backgroundColor = .black

    //Here is where I want to use the location to add a circle 
    addCircle.frame = CGRect(origin: self.location, size: CGSize(width: circleAddDefaultSize,height: circleAddDefaultSize))
}

您的代码的问题是,当您长按视图时,会执行 longPressForView,当您按下按钮时,它会在函数内部再次执行:let longPressedlocation = longPressForView(sender: ),在这一行中。所以输出不会相同。