Ios 如何使新图像视图可移动?
我一直在尝试拼凑一个项目,其中包含一个侧面滚动的集合视图,当点击一个单元格时,它将向场景添加一个新的图像视图。我想这个新的形象是拖拉 我的代码当前显示收藏视图,点击时会添加一个新图像,我称之为贴纸 我还没有完全弄清楚如何让它放置正确的标签,但我的第一个目标是确保出现的东西可以移动Ios 如何使新图像视图可移动?,ios,swift,uicollectionview,Ios,Swift,Uicollectionview,我一直在尝试拼凑一个项目,其中包含一个侧面滚动的集合视图,当点击一个单元格时,它将向场景添加一个新的图像视图。我想这个新的形象是拖拉 我的代码当前显示收藏视图,点击时会添加一个新图像,我称之为贴纸 我还没有完全弄清楚如何让它放置正确的标签,但我的第一个目标是确保出现的东西可以移动 import UIKit class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
import UIKit
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
@IBOutlet weak var collectionView: UICollectionView!
let stickers: [UIImage] = [
UIImage(named: "cow")!,
UIImage(named: "chicken")!,
UIImage(named: "pig")!,
UIImage(named: "cow")!,
UIImage(named: "chicken")!,
UIImage(named: "pig")!,
UIImage(named: "cow")!,
UIImage(named: "chicken")!,
UIImage(named: "pig")!,
]
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return stickers.count
}
var activeSticker = UIImage(named: "cow")
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CollectionViewCell
cell.stickerImage.image = stickers[indexPath.item]
cell.backgroundColor = UIColor(white: 1, alpha: 0.9)
cell.translatesAutoresizingMaskIntoConstraints = false
cell.contentMode = .scaleAspectFill
cell.clipsToBounds = true
cell.layer.cornerRadius = 7
let addSticker = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
addSticker.addTarget(self, action: #selector(addStickerTapped), for: UIControl.Event.touchUpInside)
activeSticker = cell.stickerImage.image
cell.addSubview(addSticker)
return cell
}
@IBAction func addStickerTapped() -> Void {
print("Hello Sticker Button")
let image = activeSticker //UIImage(named: imageName)
let imageView = UIImageView(image: image!)
imageView.frame = CGRect(x: 100, y: 100, width: 100, height: 200)
imageView.contentMode = .scaleAspectFit
imageView.isUserInteractionEnabled = true
self.view.addSubview(imageView)
//Imageview on Top of View
self.view.bringSubviewToFront(imageView)
}
}
要在self.view内移动imageView,可以使用UIPangestureRecognitor。例如,在viewDidLoad中添加手势识别器:
查看苹果公司的文档以了解Hi。你能在这里澄清你的主要问题吗?我不明白你说的确保出现的东西可以移动是什么意思。你到底想移动什么?为什么需要移动它?当点击一个单元格时,它会向场景中添加一个新图像。我希望用户能够拖动新的图像左右。场景基本上是一个农场,所有的细胞都是不同的动物。你可以将它们添加到农场,并将它们拖动到任何你喜欢的地方。将平移手势识别器拖动到imageView,然后你可以移动它的frame.center.x和frame.center.y,通过从手势识别器获得的位置更改。我可以让它与你的输入一起工作,谢谢!我必须做的一个编辑是将这一行:sender.setTranslation0.0,in:self.view改为:sender.setTranslationCGPoint.zero,in:self.view是的,很抱歉。应该使用。0而不是0.0。
class ViewController: UIViewController {
var selectedImageView: UIImageView?
override func viewDidLoad() {
super.viewDidLoad()
addPanGestureRecognizer()
}
func addPanGestureRecognizer() {
let pan = UIPanGestureRecognizer(target: self, action: #selector(moveImageView(_:)))
// set up and optimize pan gesture options here if you need to
self.view.addGestureRecognizer(pan)
}
@objc func moveImageView(_ sender: UIPanGestureRecognizer) {
// assign one of your image views to selectedImageView to ensure you only move one image view at a time
// for example in func addStickerTapped() you could assign selectedImageView = imageView
guard let selectedImageView = selectedImageView else {
return
}
switch sender.state {
case .changed, .ended:
selectedImageView.center = selectedImageView.center.offset(by: sender.translation(in: self.view))
sender.setTranslation(.zero, in: self.view)
default:
break
}
}
}
extension CGPoint {
func offset(by point: CGPoint) -> CGPoint {
return CGPoint(x: self.x + point.x, y: self.y + point.y)
}
}