Dpe*_*rov 18 xcode animation ios swift swift3
我希望能够在屏幕上拖动对象,但他们不会.我尝试了一切,但仍然不能.
这是代码.
func panGesture(gesture: UIPanGestureRecognizer) {
switch gesture.state {
case .began:
print("Began.")
for i in 0..<forms.count {
if forms[i].frame.contains(gesture.location(in: view)) {
gravity.removeItem(forms[i])
}
}
case .changed:
let translation = gesture.translation(in: forms[1])
gesture.view!.center = CGPoint(x: gesture.view!.center.x + translation.x, y: gesture.view!.center.y + translation.y)
gesture.setTranslation(CGPoint.zero, in: self.view)
print("\(gesture.view!.center.x)=\(gesture.view!.center.y)")
print("t;: \(translation)")
case .ended:
for i in 0..<forms.count {
if forms[i].frame.contains(gesture.location(in: view)) {
gravity.addItem(forms[i])
}
}
print("Ended.")
case .cancelled:
print("Cancelled")
default:
print("Default")
}
}
Run Code Online (Sandbox Code Playgroud)
他们也有引力.形式是正方形和圆形.
说明:在.began中 - 我禁用所选表单的重力.在.changed中 - 我试着改变坐标.在.end - 我再次启用引力.
屏幕截图.
Kir*_*odi 77
第1步:在storyBoard中选择一个要拖动的视图.
@IBOutlet weak var viewDrag: UIView!
Run Code Online (Sandbox Code Playgroud)
第2步:添加PanGesture.
var panGesture = UIPanGestureRecognizer()
Run Code Online (Sandbox Code Playgroud)
第3步:在ViewDidLoad中添加以下代码.
override func viewDidLoad() {
super.viewDidLoad()
panGesture = UIPanGestureRecognizer(target: self, action: #selector(ViewController.draggedView(_:)))
viewDrag.isUserInteractionEnabled = true
viewDrag.addGestureRecognizer(panGesture)
}
Run Code Online (Sandbox Code Playgroud)
第4步: draggedView的代码.
func draggedView(_ sender:UIPanGestureRecognizer){
self.view.bringSubview(toFront: viewDrag)
let translation = sender.translation(in: self.view)
viewDrag.center = CGPoint(x: viewDrag.center.x + translation.x, y: viewDrag.center.y + translation.y)
sender.setTranslation(CGPoint.zero, in: self.view)
}
Run Code Online (Sandbox Code Playgroud)
第5步:输出.
可拖动视图...
class DraggableView: UIIView {
var fromleft: NSLayoutConstraint!
var fromtop: NSLayoutConstraint!
override func didMoveToWindow() {
super.didMoveToWindow()
if window != nil {
fromleft = constraint(id: "fromleft")!
fromtop = constraint(id: "fromtop")!
}
}
override func common() {
super.common()
let p = UIPanGestureRecognizer(
target: self, action: #selector(drag))
addGestureRecognizer(p)
}
@objc func drag(_ s:UIPanGestureRecognizer) {
let t = s.translation(in: self.superview)
fromleft.constant = fromleft.constant + t.x
fromtop.constant = fromtop.constant + t.y
s.setTranslation(CGPoint.zero, in: self.superview)
}
}
Run Code Online (Sandbox Code Playgroud)
在场景中放置一个 UIView。
正常情况下,从左侧(即 x 位置)添加约束,并从顶部(即 y 位置)添加约束。
在故事板中,只需将约束命名为“fromleft”和“fromtop”
你完成了。
现在它可以完美运行 - 就是这样。
constraint(那个方便的电话是什么?请注意,视图只是通过 name 找到它自己的约束。
在 Xcode 中,仍然无法使用 IBOutlets 等约束。幸运的是,通过“标识符”很容易找到它们。.identifier(事实上,这就是约束特征的真正目的。)
extension UIView {
func constraint(id: String) -> NSLayoutConstraint? {
let cc = self.allConstraints()
for c in cc { if c.identifier == id { return c } }
//print("someone forgot to label constraint \(id)") //heh!
return nil
}
func allConstraints() -> [NSLayoutConstraint] {
var views = [self]
var view = self
while let superview = view.superview {
views.append(superview)
view = superview
}
return views.flatMap({ $0.constraints }).filter { c in
return c.firstItem as? UIView == self ||
c.secondItem as? UIView == self
}
}
Run Code Online (Sandbox Code Playgroud)
不要忘记对视图进行约束时(如上图所示):
您可以将左侧设置为:
选择适合您情况的正确选项。它将使计算、设置滑块等变得更加容易。
脚注 - 一个“初始化”UIView,UI“I”视图,
// UI "I" View ... "I" for initializing
// Simply saves you typing inits everywhere
import UIKit
class UIIView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
common()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
common()
}
func common() { }
}
Run Code Online (Sandbox Code Playgroud)
Use below code for Swift 5.0
第 1 步:从 Storyboard 中取出一个 UIView,将其拖到 ViewController 文件中并创建 UIView 的 IBOutlet。
@IBOutlet weak var viewDrag: UIView!
var panGesture = UIPanGestureRecognizer()
Run Code Online (Sandbox Code Playgroud)
步骤2:在viewDidLoad()中添加以下代码。
override func viewDidLoad() {
super.viewDidLoad()
let panGesture = UIPanGestureRecognizer(target: self, action:(Selector(("draggedView:"))))
viewDrag.isUserInteractionEnabled = true
viewDrag.addGestureRecognizer(panGesture)
}
Run Code Online (Sandbox Code Playgroud)
步骤 3:创建 func 并添加代码以移动 UIView,如下所示。
func draggedView(sender:UIPanGestureRecognizer){
self.view.bringSubviewToFront(viewDrag)
let translation = sender.translation(in: self.view)
viewDrag.center = CGPoint(x: viewDrag.center.x + translation.x, y: viewDrag.center.y + translation.y)
sender.setTranslation(CGPoint.zero, in: self.view)
}
Run Code Online (Sandbox Code Playgroud)
希望这会对某人有所帮助。
| 归档时间: |
|
| 查看次数: |
17957 次 |
| 最近记录: |