সোয়াইপ ইশারাটি নীচে এবং তারপরে ডানদিকে সনাক্ত করতে আমার সোয়াইপ ব্যবহার করা উচিত। তবে সুইফটে ইউআইএসওয়াইপজেক্টরআরগনাইজারের সঠিক দিকনির্দেশনা রয়েছে ... এবং আমি জানি না কীভাবে এটি অন্য দিকগুলি ব্যবহারের জন্য তৈরি করে ..
সোয়াইপ ইশারাটি নীচে এবং তারপরে ডানদিকে সনাক্ত করতে আমার সোয়াইপ ব্যবহার করা উচিত। তবে সুইফটে ইউআইএসওয়াইপজেক্টরআরগনাইজারের সঠিক দিকনির্দেশনা রয়েছে ... এবং আমি জানি না কীভাবে এটি অন্য দিকগুলি ব্যবহারের জন্য তৈরি করে ..
উত্তর:
UISwipeGestureRecognizer
প্রতিটি দিকনির্দেশের জন্য আপনার একটি থাকতে হবে। এটি কিছুটা অদ্ভুত কারণ UISwipeGestureRecognizer.direction
সম্পত্তিটি একটি বিকল্প-স্টাইলের বিট মাস্ক, তবে প্রতিটি সনাক্তকারী কেবল একটি দিক পরিচালনা করতে পারে। আপনি চাইলে এগুলি সমস্তকে একই হ্যান্ডলারের কাছে প্রেরণ করতে এবং এটিকে এখানে বাছাই করতে বা বিভিন্ন হ্যান্ডলারে প্রেরণ করতে পারেন। এখানে একটি বাস্তবায়ন:
override func viewDidLoad() {
super.viewDidLoad()
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(respondToSwipeGesture))
swipeRight.direction = .right
self.view.addGestureRecognizer(swipeRight)
let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(respondToSwipeGesture))
swipeDown.direction = .down
self.view.addGestureRecognizer(swipeDown)
}
@objc func respondToSwipeGesture(gesture: UIGestureRecognizer) {
if let swipeGesture = gesture as? UISwipeGestureRecognizer {
switch swipeGesture.direction {
case .right:
print("Swiped right")
case .down:
print("Swiped down")
case .left:
print("Swiped left")
case .up:
print("Swiped up")
default:
break
}
}
}
সুইফট 3:
override func viewDidLoad() {
super.viewDidLoad()
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
swipeRight.direction = UISwipeGestureRecognizerDirection.right
self.view.addGestureRecognizer(swipeRight)
let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
swipeDown.direction = UISwipeGestureRecognizerDirection.down
self.view.addGestureRecognizer(swipeDown)
}
func respondToSwipeGesture(gesture: UIGestureRecognizer) {
if let swipeGesture = gesture as? UISwipeGestureRecognizer {
switch swipeGesture.direction {
case UISwipeGestureRecognizerDirection.right:
print("Swiped right")
case UISwipeGestureRecognizerDirection.down:
print("Swiped down")
case UISwipeGestureRecognizerDirection.left:
print("Swiped left")
case UISwipeGestureRecognizerDirection.up:
print("Swiped up")
default:
break
}
}
}
UISwipeGestureRecognizerDirection
সামনে যুক্ত করতে হবে না .Down
। swipeDown.direction = .Down
যথেষ্ট পর্যাপ্ত হলে ব্যবহার করছি । মাত্র একটি টিপ =)
swipe.direction = [.Right,.Down,.Up,.Left]
), সনাক্তকারীকে এমনকি ডাকা হবে না, সম্ভবত এটি দ্রুতগতির একটি সমস্যা, তবে বর্তমানে এটি কার্যকর হয় না।
আমি এটির অবদানের মতো অনুভব করেছি, শেষ পর্যন্ত আরও মার্জিত দেখাচ্ছে:
func addSwipe() {
let directions: [UISwipeGestureRecognizerDirection] = [.Right, .Left, .Up, .Down]
for direction in directions {
let gesture = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipe:"))
gesture.direction = direction
self.addGestureRecognizer(gesture)
}
}
func handleSwipe(sender: UISwipeGestureRecognizer) {
print(sender.direction)
}
self.addGestureRecognizer(gesture)
আমার জন্য একটি ত্রুটি ঘটায়। কি ঠিক ছিল self.view.addGestureRecognizer(gesture);
।
UIView
সাবক্লাসে ব্যবহার করছিলাম , তবে আপনি যদি একে একে থাকেন তবে আপনি একেবারে ঠিক আছেন UIViewController
!
স্টোরিবোর্ড থেকে:
আপনার ভিউকন্ট্রোলার থেকে:
@IBAction func rightGesture(sender: UISwipeGestureRecognizer) {
print("Right")
}
@IBAction func leftGesture(sender: UISwipeGestureRecognizer) {
print("Left")
}
@IBAction func upGesture(sender: UISwipeGestureRecognizer) {
print("Up")
}
@IBAction func downGesture(sender: UISwipeGestureRecognizer) {
print("Down")
}
দেখে মনে হচ্ছে জিনিসগুলি ইদানীং পরিবর্তিত হয়েছে। এক্সকোড 7.2 এ নিম্নলিখিত পদ্ধতির কাজ করে:
override func viewDidLoad() {
super.viewDidLoad()
let swipeGesture = UISwipeGestureRecognizer(target: self, action: "handleSwipe:")
swipeGesture.direction = [.Down, .Up]
self.view.addGestureRecognizer(swipeGesture)
}
func handleSwipe(sender: UISwipeGestureRecognizer) {
print(sender.direction)
}
আইওএস 8.4 এবং 9.2 এবং 9.2 তে প্রকৃত ডিভাইসে সিমুলেটারে পরীক্ষিত।
বা, এখানে mlcollard এর কার্যকর এক্সটেনশন ব্যবহার করে :
let swipeGesture = UISwipeGestureRecognizer() {
print("Gesture recognized !")
}
swipeGesture.direction = [.Down, .Up]
self.view.addGestureRecognizer(swipeGesture)
[UISwipeGestureRecognizerDirection.right, .left, .up, .down]
আলেকজান্দ্রে ক্যাসাগেনের সহজ উপায়
let directions: [UISwipeGestureRecognizerDirection] = [.up, .down, .right, .left]
for direction in directions {
let gesture = UISwipeGestureRecognizer(target: self, action: #selector(YourClassName.handleSwipe(gesture:)))
gesture.direction = direction
self.view?.addGestureRecognizer(gesture)
}
func handleSwipe(gesture: UISwipeGestureRecognizer) {
print(gesture.direction)
switch gesture.direction {
case UISwipeGestureRecognizerDirection.down:
print("down swipe")
case UISwipeGestureRecognizerDirection.up:
print("up swipe")
case UISwipeGestureRecognizerDirection.left:
print("left swipe")
case UISwipeGestureRecognizerDirection.right:
print("right swipe")
default:
print("other swipe")
}
}
defaults write com.apple.dt.xcode IDEPlaygroundDisableSimulatorAlternateFramebuffer -bool YES
কিছু হার্ডওয়্যারে বাগ ফিক্স করার জন্য টার্মিনালে চালানো দরকার । এটি এক্সকোডের নতুন সংস্করণে ঠিক করা উচিত
সুইফটে 4.2 এবং এক্সকোড 9.4.1 এ
আপনার শ্রেণিতে অ্যানিমেশন প্রতিনিধি, CAAnimationDelegate যুক্ত করুন
//Swipe gesture for left and right
let swipeFromRight = UISwipeGestureRecognizer(target: self, action: #selector(didSwipeLeft))
swipeFromRight.direction = UISwipeGestureRecognizerDirection.left
menuTransparentView.addGestureRecognizer(swipeFromRight)
let swipeFromLeft = UISwipeGestureRecognizer(target: self, action: #selector(didSwipeRight))
swipeFromLeft.direction = UISwipeGestureRecognizerDirection.right
menuTransparentView.addGestureRecognizer(swipeFromLeft)
//Swipe gesture selector function
@objc func didSwipeLeft(gesture: UIGestureRecognizer) {
//We can add some animation also
DispatchQueue.main.async(execute: {
let animation = CATransition()
animation.type = kCATransitionReveal
animation.subtype = kCATransitionFromRight
animation.duration = 0.5
animation.delegate = self
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
//Add this animation to your view
self.transparentView.layer.add(animation, forKey: nil)
self.transparentView.removeFromSuperview()//Remove or hide your view if requirement.
})
}
//Swipe gesture selector function
@objc func didSwipeRight(gesture: UIGestureRecognizer) {
// Add animation here
DispatchQueue.main.async(execute: {
let animation = CATransition()
animation.type = kCATransitionReveal
animation.subtype = kCATransitionFromLeft
animation.duration = 0.5
animation.delegate = self
animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
//Add this animation to your view
self.transparentView.layer.add(animation, forKey: nil)
self.transparentView.removeFromSuperview()//Remove or hide yourview if requirement.
})
}
আপনি যদি ভিউ থেকে ভঙ্গিমাটি সরাতে চান তবে এই কোডটি ব্যবহার করুন
self.transparentView.removeGestureRecognizer(gesture)
উদা:
func willMoveFromView(view: UIView) {
if view.gestureRecognizers != nil {
for gesture in view.gestureRecognizers! {
//view.removeGestureRecognizer(gesture)//This will remove all gestures including tap etc...
if let recognizer = gesture as? UISwipeGestureRecognizer {
//view.removeGestureRecognizer(recognizer)//This will remove all swipe gestures
if recognizer.direction == .left {//Especially for left swipe
view.removeGestureRecognizer(recognizer)
}
}
}
}
}
এই ফাংশন কল করুন
//Remove swipe gesture
self.willMoveFromView(view: self.transparentView)
এটির মতো আপনি বাকী দিকনির্দেশগুলি লিখতে পারেন এবং নীচে থেকে উপরে এবং তদ্বিপরীত আপনার স্ক্রোল ভিউ আছে কিনা তা দয়া করে সাবধান হন
যদি আপনার কাছে স্ক্রোল ভিউ থাকে তবে আপনি উপর থেকে নীচের পক্ষে বিরোধ পাবেন এবং বিপরীত অঙ্গভঙ্গি দেখুন।
UISwipeGestureRecognizer
direction
নিম্নলিখিত সংজ্ঞা আছে যে একটি সম্পত্তি আছে:
var direction: UISwipeGestureRecognizerDirection
এই অঙ্গভঙ্গি সনাক্তকারীর জন্য সোয়াইপের অনুমতিপ্রাপ্ত দিক।
সুইফট 3.0.1 (এবং নীচে) সঙ্গে সমস্যা যে এমনকি যদি UISwipeGestureRecognizerDirection
কনর্ফাম করার OptionSet
, নিম্নলিখিত স্নিপেট কম্পাইল হবে কিন্তু কোনো ইতিবাচক প্রত্যাশিত ফল না:
// This compiles but does not work
let gesture = UISwipeGestureRecognizer(target: self, action: #selector(gestureHandler))
gesture.direction = [.right, .left, .up, .down]
self.addGestureRecognizer(gesture)
কার্যকারণ হিসাবে আপনাকে UISwipeGestureRecognizer
প্রতিটি পছন্দসই জন্য একটি তৈরি করতে হবে direction
।
নিম্নলিখিত খেলার মাঠের কোডটি অ্যারের পদ্ধতি ব্যবহার করে UISwipeGestureRecognizer
কীভাবে একই UIView
এবং একই জন্য বেশ কয়েকটি বাস্তবায়ন করতে পারে তা দেখায় :selector
map
import UIKit
import PlaygroundSupport
class SwipeableView: UIView {
convenience init() {
self.init(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
backgroundColor = .red
[UISwipeGestureRecognizerDirection.right, .left, .up, .down].map({
let gesture = UISwipeGestureRecognizer(target: self, action: #selector(gestureHandler))
gesture.direction = $0
self.addGestureRecognizer(gesture)
})
}
func gestureHandler(sender: UISwipeGestureRecognizer) {
switch sender.direction {
case [.left]: frame.origin.x -= 10
case [.right]: frame.origin.x += 10
case [.up]: frame.origin.y -= 10
case [.down]: frame.origin.y += 10
default: break
}
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
view.addSubview(SwipeableView())
}
}
let controller = ViewController()
PlaygroundPage.current.liveView = controller
UISwipeGestureRecognizerDirection(rawValue: 15)
আপনি যা দেখতে চান তার জন্য ইঙ্গিতটি সোয়াইপ করুন, বা অ্যালেক্সান্ড্রে ক্যাসাগন ভিত্তিক সুইফট 5 এবং এক্সকোড 11-এ ভিউকন্ট্রোলার পুরো দেখুন
override func viewDidLoad() {
super.viewDidLoad()
addSwipe()
}
func addSwipe() {
let directions: [UISwipeGestureRecognizer.Direction] = [.right, .left, .up, .down]
for direction in directions {
let gesture = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe))
gesture.direction = direction
self.myView.addGestureRecognizer(gesture)// self.view
}
}
@objc func handleSwipe(sender: UISwipeGestureRecognizer) {
let direction = sender.direction
switch direction {
case .right:
print("Gesture direction: Right")
case .left:
print("Gesture direction: Left")
case .up:
print("Gesture direction: Up")
case .down:
print("Gesture direction: Down")
default:
print("Unrecognized Gesture Direction")
}
}
সুইফট 5- এ সোয়াইপ অঙ্গভঙ্গি
override func viewDidLoad() {
super.viewDidLoad()
let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture))
swipeLeft.direction = .left
self.view!.addGestureRecognizer(swipeLeft)
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture))
swipeRight.direction = .right
self.view!.addGestureRecognizer(swipeRight)
let swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture))
swipeUp.direction = .up
self.view!.addGestureRecognizer(swipeUp)
let swipeDown = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture))
swipeDown.direction = .down
self.view!.addGestureRecognizer(swipeDown)
}
@objc func handleGesture(gesture: UISwipeGestureRecognizer) -> Void {
if gesture.direction == UISwipeGestureRecognizer.Direction.right {
print("Swipe Right")
}
else if gesture.direction == UISwipeGestureRecognizer.Direction.left {
print("Swipe Left")
}
else if gesture.direction == UISwipeGestureRecognizer.Direction.up {
print("Swipe Up")
}
else if gesture.direction == UISwipeGestureRecognizer.Direction.down {
print("Swipe Down")
}
}
প্রথমে একটি তৈরি baseViewController
করুন এবং viewDidLoad
এই কোডটি "swift4" যুক্ত করুন:
class BaseViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(swiped))
swipeRight.direction = UISwipeGestureRecognizerDirection.right
self.view.addGestureRecognizer(swipeRight)
let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(swiped))
swipeLeft.direction = UISwipeGestureRecognizerDirection.left
self.view.addGestureRecognizer(swipeLeft)
}
// Example Tabbar 5 pages
@objc func swiped(_ gesture: UISwipeGestureRecognizer) {
if gesture.direction == .left {
if (self.tabBarController?.selectedIndex)! < 5 {
self.tabBarController?.selectedIndex += 1
}
} else if gesture.direction == .right {
if (self.tabBarController?.selectedIndex)! > 0 {
self.tabBarController?.selectedIndex -= 1
}
}
}
}
এবং এই baseController
ক্লাসটি ব্যবহার করুন :
class YourViewController: BaseViewController {
// its done. Swipe successful
//Now you can use all the Controller you have created without writing any code.
}
নেটের উত্তরের জন্য কেবল একটি শীতল সুইফট বাক্য গঠন:
[UISwipeGestureRecognizerDirection.right,
UISwipeGestureRecognizerDirection.left,
UISwipeGestureRecognizerDirection.up,
UISwipeGestureRecognizerDirection.down].forEach({ direction in
let swipe = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
swipe.direction = direction
self.view.addGestureRecognizer(swipe)
})
সহজ। কেবল নীচের কোডটি অনুসরণ করুন এবং উপভোগ করুন।
//SwipeGestureMethodUsing
func SwipeGestureMethodUsing ()
{
//AddSwipeGesture
[UISwipeGestureRecognizerDirection.right,
UISwipeGestureRecognizerDirection.left,
UISwipeGestureRecognizerDirection.up,
UISwipeGestureRecognizerDirection.down].forEach({ direction in
let swipe = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
swipe.direction = direction
window?.addGestureRecognizer(swipe)
})
}
//respondToSwipeGesture
func respondToSwipeGesture(gesture: UIGestureRecognizer) {
if let swipeGesture = gesture as? UISwipeGestureRecognizer
{
switch swipeGesture.direction
{
case UISwipeGestureRecognizerDirection.right:
print("Swiped right")
case UISwipeGestureRecognizerDirection.down:
print("Swiped down")
case UISwipeGestureRecognizerDirection.left:
print("Swiped left")
case UISwipeGestureRecognizerDirection.up:
print("Swiped up")
default:
break
}
}
}
জন্য সুইফট 5 এটি আপডেট এর
//Add in ViewDidLoad
let gesture = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.handleSwipe))
gesture.direction = .right
self.view.addGestureRecognizer(gesture)
//Add New Method
@objc func handleSwipe(sender: UISwipeGestureRecognizer) {
print("swipe direction is",sender.direction)
}
কিছুক্ষণ খনন করার পরে:
সমস্ত 4 দিকের জন্য সোয়াইপ যুক্ত করার সংক্ষিপ্ততম উপায় হ'ল:
override func viewDidLoad() {
super.viewDidLoad()
for direction in [UISwipeGestureRecognizer.Direction.down, .up, .left, .right]{
let swipeGest = UISwipeGestureRecognizer(target: self, action: #selector(swipeAction(_:)))
swipeGest.direction = direction
self.view.addGestureRecognizer(swipeGest)
}
}
@objc func swipeAction(_ gesture: UISwipeGestureRecognizer){
switch gesture.direction {
case UISwipeGestureRecognizer.Direction.right:
print("Swiped right")
case UISwipeGestureRecognizer.Direction.down:
print("Swiped down")
case UISwipeGestureRecognizer.Direction.left:
print("Swiped left")
case UISwipeGestureRecognizer.Direction.up:
print("Swiped up")
default: break
}
সুইফ্ট 5 এ,
let swipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(handleSwipe))
swipeGesture.direction = [.left, .right, .up, .down]
view.addGestureRecognizer(swipeGesture)
এটি কেবলমাত্র একটি ফাংশন ঘোষণা করে করা যেতে পারে যা আপনার সমস্ত সোয়াইপ ইউআইএসওয়াইপজেক্টরআর সনাক্তকারী নির্দেশকে পরিচালনা করবে। আমার কোডটি এখানে:
let swipeGestureRight = UISwipeGestureRecognizer(target: self, action:#selector(ViewController.respondToSwipeGesture(_:)) )
swipeGestureRight.direction = UISwipeGestureRecognizerDirection.right
self.view .addGestureRecognizer(swipeGestureRight)
let swipeGestureLeft = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.respondToSwipeGesture(_:)))
swipeGestureLeft.direction = UISwipeGestureRecognizerDirection.left
self.view.addGestureRecognizer(swipeGestureLeft)
let swipeGestureUp = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.respondToSwipeGesture(_:)))
swipeGestureUp.direction = UISwipeGestureRecognizerDirection.up
self.view.addGestureRecognizer(swipeGestureUp)
let swipeGestureDown = UISwipeGestureRecognizer(target: self, action: #selector(ViewController.respondToSwipeGesture(_:)))
swipeGestureDown.direction = UISwipeGestureRecognizerDirection.down
self.view.addGestureRecognizer(swipeGestureDown)
এখানে ফাংশনটি যা সোয়েপডাইরেশন কার্যকারিতাটি দেবে:
func respondToSwipeGesture(_ sender: UIGestureRecognizer) {
if let swipeGesture = sender as? UISwipeGestureRecognizer {
switch swipeGesture.direction {
case UISwipeGestureRecognizerDirection.right:
print("right swipe")
case UISwipeGestureRecognizerDirection.left:
print("leftSwipe")
case UISwipeGestureRecognizerDirection.up:
print("upSwipe")
case UISwipeGestureRecognizerDirection.down:
print("downSwipe")
default:
break
}
}
}
ঠিক এর মতো: ( সুইফট ৪.২.১ )
UISwipeGestureRecognizer.Direction.init(
rawValue: UISwipeGestureRecognizer.Direction.left.rawValue |
UISwipeGestureRecognizer.Direction.right.rawValue |
UISwipeGestureRecognizer.Direction.up.rawValue |
UISwipeGestureRecognizer.Direction.down.rawValue
)