2015-10-24 7 views
6

Я попробовал этот методтянущие изображения по экрану с помощью быстрого

@IBAction func handlePan(recognizer:UIPanGestureRecognizer) { 

let translation = recognizer.translationInView(self.view) 
if let view = recognizer.view { 
    view.center = CGPoint(x:view.center.x + translation.x, 
         y:view.center.y + translation.y) 
} 
recognizer.setTranslation(CGPointZero, inView: self.view) 
} 

Это работает, но проблема в том, что, когда я использую этот метод на нескольких изображениях, что создают некоторые проблемы, например, когда перетащить одно изображение и измените его положение, но когда я нажимаю и перетаскиваю второе изображение. Мое первое изображение возвращается в исходное положение. Вот изображения я получаю от зрения прокрутки: Когда я нажимаю второе изображение 1-изображение также перейти в исходное положение

enter image description here

Я перетаскивая изображение его штраф здесь

enter image description here

ответ

6

Автоматическая компоновка запускает ваши изображения обратно туда, где они говорят.

Самый простой способ обойти это - создать свои изображения в коде вместо их создания в раскадровке.

Что-то вроде:

let lightBulb = UIImageView(frame: CGRectMake(100, 100, 50, 50)) 
lightBulb.image = UIImage(named: "lightBulb") 
lightBulb.contentMode = .ScaleToFill 
lightBulb.userInteractionEnabled = true 

lightBulb.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: "handlePan:")) 

self.view.addSubview(lightBulb) 
+0

я попытался это, но ничего не отображается на экране я написал этот код на обратной стороне кнопки действия –

+0

Я просто попытался это, и это работает. Возможно, вам нужно создать '@ IBOutlet' для представления содержимого прокрутки, чтобы упростить добавление элементов. '@IBOutlet weak var contentView: UIView!' И перехватить это в представлении содержимого вашего представления прокрутки. Затем добавьте lightBulb следующим образом: 'contentView.addSubview (lightBulb)'. – vacawama

+0

Я получаю это: «UIScrollView не имеет члена с именем contentView», и я хочу выбрать изображения из прокрутки, а затем отобразить их на главном экране. –

6
class DraggableImageView: UIImageView { 


var dragStartPositionRelativeToCenter : CGPoint? 

override init(image: UIImage!) { 
    super.init(image: image) 

    self.userInteractionEnabled = true //< w00000t!!!1 

    addGestureRecognizer(UIPanGestureRecognizer(target: self, action: "handlePan:")) 

    layer.shadowColor = UIColor.blackColor().CGColor 
    layer.shadowOffset = CGSize(width: 0, height: 3) 
    layer.shadowOpacity = 0.5 
    layer.shadowRadius = 2 
} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

func handlePan(nizer: UIPanGestureRecognizer!) { 
    if nizer.state == UIGestureRecognizerState.Began { 
     let locationInView = nizer.locationInView(superview) 
     dragStartPositionRelativeToCenter = CGPoint(x: locationInView.x - center.x, y: locationInView.y - center.y) 

     layer.shadowOffset = CGSize(width: 0, height: 20) 
     layer.shadowOpacity = 0.3 
     layer.shadowRadius = 6 

     return 
    } 

    if nizer.state == UIGestureRecognizerState.Ended { 
     dragStartPositionRelativeToCenter = nil 

     layer.shadowOffset = CGSize(width: 0, height: 3) 
     layer.shadowOpacity = 0.5 
     layer.shadowRadius = 2 

     return 
    } 

    let locationInView = nizer.locationInView(superview) 

    UIView.animateWithDuration(0.1) { 
     self.center = CGPoint(x: locationInView.x - self.dragStartPositionRelativeToCenter!.x, 
      y: locationInView.y - self.dragStartPositionRelativeToCenter!.y) 
    } 
} 

/* 
// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
override func drawRect(rect: CGRect) { 
// Drawing code 
} 
*/ 
} 
+0

он работает для меня – Dhiraj

+1

Как я могу использовать этот класс? – n4zg