テストとして、tinder に似た簡単なアプリを作成しています。これにより、ユーザーは写真 (画像ビュー) を左側または右側にドラッグでき、新しいものが読み込まれます。ただし、左側または右側に移動する前に画像ビューを放すと、写真の中央に送信されます。元の開始位置の代わりに画面。画像ビューの元の開始位置を何らかの方法で保存し、後で呼び出す必要があると思いますが、その方法がわかりません
ここに私の関連コードがあります:
class SwipingViewController: UIViewController {
@IBOutlet var userImage: UIImageView!
@IBOutlet var infoLabel: UILabel!
var displayedUserId = ""
//set image position
func wasDragged(gesture: UIPanGestureRecognizer) {
let translation = gesture.translationInView(self.view)
let imageDrag = gesture.view!
imageDrag.center = CGPoint(x: self.view.bounds.width / 2 + translation.x, y: self.view.bounds.height / 2 + translation.y)
let xFromCenter = imageDrag.center.x - self.view.bounds.width / 2
let scale = min(100 / abs(xFromCenter), 1)
var rotation = CGAffineTransformMakeRotation(xFromCenter / 200)
var stretch = CGAffineTransformScale(rotation, scale, scale)
imageDrag.transform = stretch
if gesture.state == UIGestureRecognizerState.Ended {
var acceptedOrRejected = ""
if imageDrag.center.x < 100 {
acceptedOrRejected = "rejected"
print("not chosen" + displayedUserId)
} else if imageDrag.center.x > self.view.bounds.width - 100 {
acceptedOrRejected = "accepted"
print("Chosen")
}
if acceptedOrRejected != "" {
PFUser.currentUser()?.addUniqueObjectsFromArray([displayedUserId], forKey: acceptedOrRejected)
PFUser.currentUser()?.saveInBackgroundWithBlock({
(succeeded: Bool, error: NSError?) -> Void in
if succeeded {
} else {
print(error)
}
})
}
//Resets image position after it has been let go of
rotation = CGAffineTransformMakeRotation(0)
stretch = CGAffineTransformScale(rotation, 1, 1)
imageDrag.transform = stretch
imageDrag.center = CGPoint(x: self.view.bounds.width / 2, y: self.view.bounds.height / 2)
updateImage()
}
}
問題のスクリーンショットは次のとおりです。
画像開始位置
画像終了位置
助けてくれてありがとう、私はまだswiftにかなり慣れていない