it-swarm.com.ru

Как добавить пользовательский просмотр изображений в uitableviewcell в Swift?

Что мне нужно сделать, это добавить изображение круга в ячейку на uitableview. Как я могу это сделать?

Я попробовал некоторый код, но я не работаю вообще, вот мой код:

let imageName = "person.png"
    let image = UIImage(named: imageName)
    var imageView = UIImageView(image: image!)

    imageView = UIImageView(frame: CGRectMake(0, 0, 100, 100))
    imageView.layer.borderWidth=1.0
    imageView.layer.masksToBounds = false
    imageView.layer.borderColor = UIColor.whiteColor().CGColor
    imageView.layer.cornerRadius = 13;
    imageView.clipsToBounds = true

    cell.imageView!.image = imageView

Я получил эту ошибку:

нельзя присвоить значение типа «UIImageView» значению типа «UIImage?»

6
Ega Setya Putra

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

Сначала добавьте функцию, которая изменит размер вашего изображения:

func resizeImage(image:UIImage, toTheSize size:CGSize)->UIImage{


    var scale = CGFloat(max(size.width/image.size.width,
        size.height/image.size.height))
    var width:CGFloat  = image.size.width * scale
    var height:CGFloat = image.size.height * scale;

    var rr:CGRect = CGRectMake( 0, 0, width, height);

    UIGraphicsBeginImageContextWithOptions(size, false, 0);
    image.drawInRect(rr)
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext();
    return newImage
}

После этого вы можете назначить изображение:

let imageName = "11749-simple.jpg"
let image = UIImage(named: imageName)
let newImage = resizeImage(image!, toTheSize: CGSizeMake(70, 70))
var cellImageLayer: CALayer?  = cell.cellImage.layer
cellImageLayer!.cornerRadius = cellImageLayer!.frame.size.width / 2
cellImageLayer!.masksToBounds = true
cell.cellImage.image = newImage

И результат будет:

enter image description here

Или вы можете попробовать это расширение:

extension UIImage {
var circleMask: UIImage {
    let square = size.width < size.height ? CGSize(width: size.width, height: size.width) : CGSize(width: size.height, height: size.height)
    let imageView = UIImageView(frame: CGRect(Origin: CGPoint(x: 0, y: 0), size: square))
    imageView.contentMode = UIViewContentMode.ScaleAspectFill
    imageView.image = self
    imageView.layer.cornerRadius = square.width/2
    imageView.layer.borderColor = UIColor.whiteColor().CGColor
    imageView.layer.borderWidth = 5
    imageView.layer.masksToBounds = true
    UIGraphicsBeginImageContext(imageView.bounds.size)
    imageView.layer.renderInContext(UIGraphicsGetCurrentContext())
    let result = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return result
    }
}

и вы можете назначить изображение:

let imageName = "11749-simple.jpg"
let image = UIImage(named: imageName)
cell.cellImage.image = image?.circleMask

Расширение кредитов до ЭТО ответ.

17
Dharmesh

Сделайте один класс Cell, который хотите загрузить в ваш TableView.

Класс CellComment

class CellComment: UITableViewCell 
{
  @IBOutlet weak var imageV_profile: UIImageView!

    override func awakeFromNib() {

          super.awakeFromNib()

          imageV_profile.layer.cornerRadius = 25

         imageV_profile.layer.masksToBounds = true
    }
}

Теперь загрузите эту ячейку в таблицу, как показано ниже.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{

       var  cell:CellPost! = tableView.dequeueReusableCellWithIdentifier("CellPost") as? CellPost

       if (cell == nil)
       {
          let nib:Array = NSBundle.mainBundle().loadNibNamed("CellPost", owner: self, options: nil)
          cell = nib[0] as? CellPost
       }

      cell.imageV_profile.image = UIImage(named: "Your image name")

      return cell
}
1
Kirit Modi

Попробуйте этот код. Это дает именно то, что вы хотите ....

let imageName = "person.png"
let image1 = UIImage(named: imageName)

var imageView = UIImageView(frame: CGRectMake(5, 5, 100, 100))
imageView.layer.borderWidth=1.0
imageView.layer.masksToBounds = true
imageView.layer.borderColor = UIColor.whiteColor().CGColor
imageView.layer.cornerRadius = 50;// Corner radius should be half of the height and width.
imageView.image = image1
cell.addSubview(imageView)
1
Pritam
 can you just replace imageView to image 

let imageName = "person.png"
let image = UIImage(named: imageName)
var imageView = UIImageView(image: image!)
imageView = UIImageView(frame: CGRectMake(0, 0, 100, 100))
imageView.layer.borderWidth=1.0
imageView.layer.masksToBounds = false
imageView.layer.borderColor = UIColor.whiteColor().CGColor
imageView.layer.cornerRadius = 13;
imageView.clipsToBounds = true

cell.imageView!.image = image 
1