Swift Eureka - изображение на весь экран - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь создать пользовательскую ячейку в Eureka, которая отображает изображение.При нажатии на изображение изображение отображается на полном экране с черным фоном.

Обычно вы делаете это с view.addSubview (newImageView), но не похоже, что ячейка Eureka имеет класс представления.

Вот что я получил до сих пор для ячейки:

final class ImageViewCell: Cell<ImageView>, CellType {

@IBOutlet weak var viewImage: UIImageView!

//let storage = Storage.storage().reference()

required init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

override func setup() {
    super.setup()
    //cell not selectable
    selectionStyle = .none

    viewImage.contentMode = .scaleAspectFill
    viewImage.clipsToBounds = true

    height = {return 300 }

    //make userImage reconize tapping
    let tapRec = UITapGestureRecognizer(target: self, action: #selector(imageTapHandler(tapGestureRecognizer:)))
    viewImage.addGestureRecognizer(tapRec)
    viewImage.isUserInteractionEnabled = true

}

@objc func imageTapHandler(tapGestureRecognizer: UITapGestureRecognizer) {
    let imageView = tapGestureRecognizer.view as! UIImageView
    let newImageView = UIImageView(image: imageView.image)
    newImageView.frame = UIScreen.main.bounds
    newImageView.backgroundColor = .black
    newImageView.contentMode = .scaleAspectFit
    newImageView.isUserInteractionEnabled = true
    let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage))
    newImageView.addGestureRecognizer(tap)
    view.addSubview(newImageView)


}

@objc func dismissFullscreenImage(_ sender: UITapGestureRecognizer) {

    sender.view?.removeFromSuperview()
}

override func update() {
    super.update()

    // we do not want to show the default UITableViewCell's textLabel
    textLabel?.text = nil

    // get the value from our row
    guard let imageData = row.value else { return }

    // get user image data from value
    let downloadData = imageData.pictureData

    viewImage.image = UIImage(data: downloadData)


}



}

Я получаю «Использование неразрешенного идентификатора« view »» при попытке добавить SubSubview.

Я пытался использовать contentView вместозрения, и результат выглядит так:

Снимок экрана для вида

image

Ответы [ 2 ]

0 голосов
/ 21 июня 2018

Спасибо за Kamran, я думаю, что нашел решение.

для строк Eureka, вы всегда можете использовать обратный вызов row.onCellSelection.

в моем случае я могу сделать это при вызовенастраиваемая строка:

                            <<< ImageViewCellRow(){ row in
                            row.value = ImageView(pictureData: data!)
                            row.onCellSelection(showMe)
                    }

, затем создайте функцию showMe следующим образом:

    func showMe(cell: ImageViewCell, row: (ImageViewCellRow)) {
            print("tapped my ImageViewCell!")
    }

теперь вы сможете представить полноэкранное изображение в виде кода Камрана.

0 голосов
/ 10 июня 2018

Если вы хотите отобразить изображение в полноэкранном режиме, ячейка contentView или подпункт viewController, который содержит эту ячейку, не подходят для добавления этого image как subview.

Надлежащим решением для этого является использование обратного вызова onCellSelection (что-то, как показано ниже) в вашем контейнере ViewController и представление нового ViewController полноэкранного изображения только этого дисплея или любой другой настройки, которую вы хотите.

imageCell.onCellSelection({[weak self] (cell, row) in
      let imageVC = DisplayViewController()
      imageVC.image = cell.viewImage.image
      self?.present(imageVC, animated: true, completion: nil)
})

Если вы хотите показывать полноэкранный режим только тогда, когда пользователь нажимает на изображение в ячейке, вы должны получить tapGesture callback в контейнере ViewController и показать изображение, как указано выше.

...