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

问题描述 投票:0回答:1

有没有办法使用其他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))
objective-c swift view uibutton
1个回答
0
投票

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

    //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: )中再次执行它。因此输出将不会相同。

© www.soinside.com 2019 - 2024. All rights reserved.