Как перетащить ImageView в CollectionView в Swift и элемент CollectionView в ImageView, как редактирование профиля приложения tinder - PullRequest
0 голосов
/ 09 июня 2018

Я новичок в iOS, и я не знаю, как это сделать, я хочу реализовать тиндер, как анимация редактирования профиля.

например,

Я могу перетащить изображение вна другие UIImageView или UICollectionView и коллекционный предмет в основную UIImageView.

Я реализовал LongGestureListener из UICollectionView Но я могу перетаскивать элементы только между элементами UICollectionView.

Заранее спасибо.

1 Ответ

0 голосов
/ 08 октября 2018

для swift 4.2

  • изображения поступают из prev controller

import UIKit

private let reuseIdentifier = "cell"

class MyRoomCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout {

var images:[UIImage]=[]
var screenSize: CGRect!
var screenWidth: CGFloat!
fileprivate var longPressGesture: UILongPressGestureRecognizer!

override func viewDidLoad() {
    super.viewDidLoad()

    collectionView.allowsMultipleSelection=true

    screenSize = UIScreen.main.bounds
    screenWidth = screenSize.width-6

    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top: 10, left: 1, bottom: 10, right: 1)
    layout.itemSize = CGSize(width: screenWidth/3, height: screenWidth/3)
    layout.minimumInteritemSpacing = 1.5
    layout.minimumLineSpacing = 1.5
    collectionView!.collectionViewLayout = layout

    longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(self.handleLongGesture(gesture:)))
    collectionView.addGestureRecognizer(longPressGesture)
}
override func numberOfSections(in collectionView: UICollectionView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}


override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of items
    return images.count
}

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! RoomCollectionViewCell

    cell.img.image=images[indexPath.row]

    return cell
}

override func collectionView(_ collectionView: UICollectionView, canMoveItemAt indexPath: IndexPath) -> Bool
{
    return true
}
override func collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath)
{
    //print("Starting Index: \(sourceIndexPath.item)")
    //print("Ending Index: \(destinationIndexPath.item)")
    let temp=images[sourceIndexPath.item]
    images.remove(at: sourceIndexPath.item)
    images.insert(temp, at: destinationIndexPath.item)
    self.collectionView.reloadData()
}
@objc func handleLongGesture(gesture: UILongPressGestureRecognizer) {
    switch(gesture.state) {

    case .began:
        guard let selectedIndexPath = collectionView.indexPathForItem(at: gesture.location(in: collectionView)) else {
            break
        }
        collectionView.beginInteractiveMovementForItem(at: selectedIndexPath)
    case .changed:
        collectionView.updateInteractiveMovementTargetPosition(gesture.location(in: gesture.view!))
    case .ended:
        collectionView.endInteractiveMovement()
    default:
        collectionView.cancelInteractiveMovement()
    }
}
@IBAction func arrangeIt(_ sender: Any) {
    performSegue(withIdentifier: "videosegue", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let dest=segue.destination as! VideoMakerViewController
    dest.images=images
}

}

...