2015-10-24 10 views
6

Próbowałem tej metodyPrzeciąganie obrazów na całym ekranie za pomocą szybkiego

@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) 
} 

To działa, ale problemem jest to, że podczas korzystania z tej metody na wielu obrazach stworzyć pewne problemy na przykład kiedy przeciągnij jeden obraz i zmień jego pozycję, ale gdy kliknę i przeciągnę drugi obraz. Mój pierwszy obraz wraca do pierwotnej pozycji. Oto zdjęcia Dostaję z widoku przewijania: Kiedy klikam drugi obraz 1st obraz również przejść pierwotnego położenia

enter image description here

ja przeciągnąć obraz grzywny tutaj

enter image description here

Odpowiedz

6

Układ automatyczny uruchamia umieszczanie obrazów z powrotem w miejscu, w którym wiązania mówią, że powinny być.

Najprostszym sposobem obejścia tego problemu jest utworzenie obrazów w kodzie zamiast tworzenia ich w Storyboard.

Coś jak:

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

próbowałem tego, ale nic nie jest wyświetlane na ekranie Pisałem ten kod na odwrocie działania przycisku –

+0

Właśnie próbował to i to działa. Być może powinieneś utworzyć "@ IBOutlet" do widoku zawartości widoku przewijania, aby ułatwić dodawanie elementów. '@IBOutlet weak var contentView: UIView!' I przechwyć go do widoku zawartości twojego widoku przewijania. Następnie dodaj lightBulb w ten sposób: 'contentView.addSubview (lightBulb)'. – vacawama

+0

Otrzymuję to "UIScrollView nie ma członka o nazwie contentView" i chcę wybrać obrazy z widoku przewijania, a następnie wyświetlić go do głównego widoku –

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

to działa dla mnie – Dhiraj

+1

Jak korzystać z tej klasy? – n4zg

Powiązane problemy