有没有办法使用其他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: )
中再次执行它。因此输出将不会相同。