2016-03-11 2 views
1

у меня есть этот код:UITapGestureRecognizer вызывается только один раз

func initPlaceHolder(width: CGFloat, height: CGFloat){ 
    var firstPlaceHolderPosition: CGFloat = 0; 

    UIGraphicsBeginImageContextWithOptions(CGSize(width: width, height: height), false, 0) 

    let context = UIGraphicsGetCurrentContext() 
    let rectangle = CGRect(x: 0, y: 0, width: width, height: height) 

    CGContextSetFillColorWithColor(context, UIColor.whiteColor().CGColor) 
    CGContextSetStrokeColorWithColor(context, UIColor.blackColor().CGColor) 
    CGContextSetLineWidth(context, 1) 

    CGContextAddRect(context, rectangle) 
    CGContextDrawPath(context, .FillStroke) 

    let img = UIGraphicsGetImageFromCurrentImageContext() 

    for i in 1...4 { 
     let imageView = StompUIImageView(frame: CGRect(x: firstPlaceHolderPosition, y: 0, width: width, height: height)) 
     let tap = UITapGestureRecognizer(target: self, action: "doubleTapped:") 

     tap.numberOfTapsRequired = 2 

     imageView.image = img 
     imageView.addGestureRecognizer(tap) 
     imageView.userInteractionEnabled = true 
     imageView.stompID = String(i) 
     imageView.stompSlot = i 

     addSubview(imageView) 

     firstPlaceHolderPosition = firstPlaceHolderPosition + width + 10 

     UIGraphicsEndImageContext() 
    } 
} 

func doubleTapped(sender: UITapGestureRecognizer) { 
    let view = sender.view as! StompUIImageView 
    print(view.stompID) 
} 

В основном обработчик doubleTapped вызывается только для первого UIImageView и не для всех 4. К сожалению будучи новым для развития Иос у меня есть трудности, чтобы понять путь.

Спасибо за любую помощь

+0

На первый взгляд с вашим кодом ничего не случилось. И вы правы, что вы используете отдельные жесты для изображений. Не используйте единый жест, как указано в ответе ниже для нескольких изображений. В этом случае жест будет работать только для последнего вида. Где вы называете initPlaceHolder? Является ли это частью другого uiview? как этот uiview используется? – Nimble

ответ

0

Мой код был в порядке, отвечая на мою собственную проблему. Проблема была в строке: addSubview (imageView)

Я добавлял 4 заполнителя (около 300 пикселей) в контейнер, меньший, чем сумма ширины всех моих заполнителей. Хотя я видел, что все заполнители правильно отображаются, рамка не была достаточно большой, чтобы содержать их, и поэтому двойной кран не распознается. Создание контейнера больше решило проблему.

0

Try это ...

Заменить код с этим ....

Я надеюсь, что это поможет.

func initPlaceHolder(width: CGFloat, height: CGFloat){ 
    var firstPlaceHolderPosition: CGFloat = 0; 

    UIGraphicsBeginImageContextWithOptions(CGSize(width: width, height: height), false, 0) 

    let context = UIGraphicsGetCurrentContext() 
    let rectangle = CGRect(x: 0, y: 0, width: width, height: height) 

    CGContextSetFillColorWithColor(context, UIColor.whiteColor().CGColor) 
    CGContextSetStrokeColorWithColor(context, UIColor.blackColor().CGColor) 
    CGContextSetLineWidth(context, 1) 

    CGContextAddRect(context, rectangle) 
    CGContextDrawPath(context, .FillStroke) 

    let img = UIGraphicsGetImageFromCurrentImageContext() 

    let tap = UITapGestureRecognizer(target: self, action: "doubleTapped:") 

    tap.numberOfTapsRequired = 2 


    for i in 1...4 { 
     let imageView = StompUIImageView(frame: CGRect(x: firstPlaceHolderPosition, y: 0, width: width, height: height)) 

     imageView.image = img 
     imageView.addGestureRecognizer(tap) 
     imageView.userInteractionEnabled = true 
     imageView.stompID = String(i) 
     imageView.stompSlot = i 

     addSubview(imageView) 

     firstPlaceHolderPosition = firstPlaceHolderPosition + width + 10 

     UIGraphicsEndImageContext() 
    } 
} 

func doubleTapped(sender: UITapGestureRecognizer) { 
    let view = sender.view as! StompUIImageView 
    print(view.stompID) 
} 
+0

Спасибо за ваш ответ. Ваш код был моим первым решением, и он не работал вообще. Я не уверен, но, может быть, у вас может быть только один взгляд на жест? Вот почему я создаю несколько экземпляров одного и того же распознавателя. – iFrankz

+0

@iFrankz вы можете предоставить тег для просмотра изображений, а затем различать жест 'imageView', используя теги. – DJ1

+0

для справки http://stackoverflow.com/questions/4747238/can-you-attach-a-uigesturerecognizer-to-multiple-views – Nimble

Смежные вопросы