Reputation: 1608
In Swift, say we have a draggable UIButton that can be dropped on a number of Views. What is the swiftest way to gain reference to said View?
let Array: [UIViews] = [View1, View2, View3, View4, View5, View6]
func oneFingerSwipe(_ gesture:UIPanGestureRecognizer){
let pointInView = gesture.location(in: gesture.view)
switch(gesture.state){
case .changed:
Button.center = CGPoint(x: pointInView.x, y: pointInView.y)
case .ended:
if Array.contains(where: { $0.frame.contains(pointInView)}) {
// do something to said View($0) through either Array[index] or reference to the View($0)
}
//INSTEAD of long winded
if View1.frame.contains(pointInView) {
//do work to View1
} else if View2.frame.contains(pointInView) {
//do work to View2
} else if View3.frame.contains(pointInView) {
//do work to View3
} else if View4.frame.contains(pointInView) {
//do work to View4
} else if View5.frame.contains(pointInView) {
//do work to View5
} else if View6.frame.contains(pointInView) {
//do work to View6
}
default: break
}
}
Upvotes: 3
Views: 55
Reputation: 726609
You should be able to filter the array of views and take the first matching one using first(where:)
function:
if let targetView = Array.first(where: {$0.frame.contains(pointInView)} ) {
...
}
Upvotes: 3