私は、すべての画像に原点位置を決定し、各画像にパンジェスチャを適用するためのCGpointを与えるために、コレクションアウトレットがループされたプログラムを持っています。SWIFT:配列からの画像とCGPointを関連付けます
しかし、私の問題は、パンのジェスチャーが終了すると、最初に決定された元の位置にスナップバックする必要があるということです。しかし、私がそうするとき、
if sender.state == UIGestureRecognizerState.Ended {
for image in imageCollection {
image.center = positionOrigin
}
画像は別の位置/別の画像と同じ位置に戻って移動します。 これは、CGPointの原点をインデックスを使って各画像に関連付けていないという事実が原因であると考えています(辞書を使うのは意味がありますか?)。 これを解決する方法を知っている人は誰ですか?ここで
は私のコードです:
import UIKit
class ViewController: UIViewController, UIGestureRecognizerDelegate {
@IBOutlet var imageCollection: [UIImageView]!
var positionOrigin: CGPoint!
override func viewDidLoad() {
super.viewDidLoad()
for image in imageCollection {
positionOrigin = image.center
let recognizer = UIPanGestureRecognizer(target: self, action: #selector(ViewController.handlePan))
recognizer.delegate = self
image.addGestureRecognizer(recognizer)
}
}
func handlePan(sender:UIPanGestureRecognizer) {
let translation = sender.translationInView(self.view)
if let view = sender.view {
view.center = CGPoint(x:view.center.x + translation.x,
y:view.center.y + translation.y)
sender.setTranslation(CGPointZero, inView: self.view)
}
if sender.state == UIGestureRecognizerState.Ended {
for image in imageCollection {
image.center = positionOrigin
}
}
}
}
はい、既にCGPointを配列にして両方を繰り返し処理しようとしましたが、何とか止まってしまいました。私は、画像位置を追加する行にエラーメッセージ "スレッド1:EXC_BAD_INSTRUCTION"が表示されます。 '@IBOutlet var imageCollection:[UIImageView]! var originPositions:[CGPoint]! I = 0 originPositions.append(imageCollection [I] .center) imageCollection {VARの画像のためのviewDidLoad FUNC オーバーライド(){ super.viewDidLoad() I + = 1 [...]} } ' – Jake2Finn
このよう試みる:imageCollection { originPositions.append(image.center)の画像の場合)のviewDidLoad FUNCするvar originPositions = [するCGPoint]() オーバーライド(){ super.viewDidLoad( を } – Dasem
ハ!これで、意図どおりにスムーズに動作します。すばらしいです!どうもありがとう! – Jake2Finn