このコードを使用してUIImageViewをスワイプするときにNSLogを実行しようとしていますが、何らかの理由で機能しません。何か案が ?
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
UIImage *image = [UIImage imageNamed:@"image2.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = [[UIScreen mainScreen] bounds];
[self.view addSubview:imageView];
UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(rightSwipeHandle:)];
[recognizer setNumberOfTouchesRequired:1];
[imageView addGestureRecognizer:recognizer];
}
- (void)rightSwipeHandle:(UISwipeGestureRecognizer*)gestureRecognizer {
NSLog(@"right swipe");
}
有効IImageビューのユーザー操作これはデフォルトで無効になっています。
[imageView setUserInteractionEnabled:YES];
スワイプジェスチャーイベントの追加
UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
// Setting the swipe direction.
[swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
[swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];
// Adding the swipe gesture on image view
[imageView addGestureRecognizer:swipeLeft];
[imageView addGestureRecognizer:swipeRight];
スワイプジェスチャイベントの処理
- (void)handleSwipe:(UISwipeGestureRecognizer *)swipe {
if (swipe.direction == UISwipeGestureRecognizerDirectionLeft) {
NSLog(@"Left Swipe");
}
if (swipe.direction == UISwipeGestureRecognizerDirectionRight) {
NSLog(@"Right Swipe");
}
}
UIImageViewを作成した後、必ずimageView.userInteractionEnabled = YES;
を追加してください。
これにより、ユーザーは、タップ、ドラッグ、スワイプ、またはその他の一般的なジェスチャーなどのビューと対話できます。
ドキュメントを参照してください here 。
In Swift 3
ImageView.isUserInteractionEnabled = true
let swipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(self.getSwipeAction(_:)))
self.ImageView.addGestureRecognizer(swipeGesture)
func getSwipeAction( _ recognizer : UISwipeGestureRecognizer){
if recognizer.direction == .right{
print("Right Swiped")
} else if recognizer.direction == .left {
print("Left Swiped")
}
}
他のUIViews
とは異なり、UIImageView
は、デフォルトとして、ユーザーインタラクションdisabled
を伴います。コードに次の行を含めると、ジェスチャーは期待どおりに機能するはずです。
imageView.userInteractionEnabled = YES;
Swift 4、.
@IBOutlet weak var Imageview: UIImageView!
var images=[UIImage]()
var i=Int()
override func viewDidLoad() {
super.viewDidLoad()
let swipeLeftGesture=UISwipeGestureRecognizer(target: self, action: #selector(SwipeLeftImage))
Imageview.isUserInteractionEnabled=true
swipeLeftGesture.direction = UISwipeGestureRecognizerDirection.left
Imageview.addGestureRecognizer(swipeLeftGesture)
let swipeRightGesture=UISwipeGestureRecognizer(target: self, action: #selector(SwipeRightImage))
swipeRightGesture.direction = UISwipeGestureRecognizerDirection.right
Imageview.addGestureRecognizer(swipeRightGesture)
}
@objc func SwipeLeftImage(){
if i<images.count-1{
i+=1
Imageview.image=images[i]
}
}
@objc func SwipeRightImage(){
if i<=images.count-1{
i-=1
Imageview.image=images[i]
}
}
//MARK:- imagePickerController Delegate Function
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
self.dismiss(animated: true, completion: nil)
if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
Imageview.contentMode = .scaleToFill
Imageview.image=nil
images.insert(pickedImage, at: images.endIndex)
Imageview.image = pickedImage
}
}
個々のUIImageViewではなくself.viewに追加した場合、UISwipeGestureRecognizerを動作させることができるという問題に直面していました。 Swift 3コード例。