2017-03-31 4 views
4

Meinen ersten Beitrag und ich bin derzeit eine App in Xcode 8.1 mit Swift 3Wie beschränke ich den Widerstandsbereich für Bildansichten

Ich habe 9 Bilder zu machen, die ich mit touchesBegan und touchesMoved Funktionen ziehbar gemacht habe.

Sie können jedoch ÜBERALL auf den Bildschirm gezogen werden und dies kann dazu führen, dass sie andere Bilder verdecken, die ich habe. Ich möchte ihre Bewegung einschränken, indem ich eine Grenze für sie festlege, so dass selbst wenn der Benutzer versucht, die Bilder aus dieser Grenze herauszuziehen, nicht in der Lage ist.

Ich habe diesen Code in Draggedimageview.swift erstellt, damit die Bildansichten gezogen werden können.

Ich habe lange Zeit versucht, herauszufinden, wie man das macht und wenn jemand helfen kann, würde ich es zu schätzen wissen.

Dank ...

import UIKit 

class DraggedImageView: UIImageView { 

    var startLocation: CGPoint? 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

     startLocation = touches.first?.location(in: self) 
    } 

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 

     let currentLocation = touches.first?.location(in: self) 
     let dx = currentLocation!.x - startLocation!.x 
     let dy = currentLocation!.y - startLocation!.y 

     self.center = CGPoint(x: self.center.x+dx, y: self.center.y+dy) 
    } 
} 
+1

Bevor Sie self.center einstellen, schauen Sie sich an, was Sie gerade einstellen und ändern Sie es basierend auf Ihrer Grenze. Zeig uns deinen Versuch. –

+0

Ausgezeichneter erster Beitrag! Mach weiter so. – Sethmr

Antwort

3

Sie dies tun können:

let cx = self.center.x+dx 
if (cx > 100) { 
    cx = 100 
} 

self.center = CGPoint(x: cx, y: self.center.y+dy) 

Aber verändern das auf, wenn basierend, was Sie zu tun versuchen. Dies klemmt es so, dass es nicht in eine Position bewegt werden kann, wo center.x > 100

+0

Danke, wo müsste ich das in den Code schreiben, den ich geschrieben habe, damit es funktioniert? Worauf bezieht sich cx? Ich bin sehr neu in Xcode und Programmierung im Allgemeinen. – carl

+0

Wo immer Sie das Zentrum normal einstellen. In dem Code, den Sie zeigten, war es in touchesMoved –

+0

Würde ich diesen Code anstelle von bestimmten Code, den ich verwendet oder zusätzlich zu verwenden? – carl

1

Versuchen Sie, „erlaubt Bereich“ in einem rect, wie zu definieren:

import UIKit 

class DraggedImageView: UIImageView { 

    var startLocation: CGPoint? 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

     startLocation = touches.first?.location(in: self) 
    } 

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 

     let currentLocation = touches.first?.location(in: self) 
     let dx = currentLocation!.x - startLocation!.x 
     let dy = currentLocation!.y - startLocation!.y 

     // This is the area in which the dragging is allowed 
     let coolArea = CGRect(x: 0, y: 0, width: 100, height: 100) 

     let newCenter = CGPoint(x: self.center.x+dx, y: self.center.y+dy) 

     // If the allowed area contains the new point, we can assign it 
     if coolArea.contains(newCenter) { 
      self.center = newCenter 
     } 
     // else { 
     // print("Out of boundaries!") 
     // } 

     self.center = CGPoint(x: self.center.x+dx, y: self.center.y+dy) 
    } 
} 

Möglicherweise möchten Sie den Code ändern, wenn Sie möchten, etwas anderes passiert, wenn der Benutzer die Grenzen überschreitet.

+0

Also würde ich diesen Code zu meinem aktuellen Code hinzufügen müssen? Ich habe nur Mühe zu verstehen, was dieser Code eigentlich macht. – carl

+0

Also müsste ich diesen Code zu meinem aktuellen Code hinzufügen? Ich habe nur Mühe zu verstehen, was dieser Code eigentlich macht. coolArea wäre die Rechteckgrenze, in der ich die Bilder behalten möchte, nicht wahr? Also müsste ich das über meinen aktuellen Code schreiben oder müsste ich etwas ändern? – carl

+0

das Beispiel verfeinert, überprüfen Sie es –

Verwandte Themen