web-dev-qa-db-ja.com

Swiftのテーブルビューセルにカスタムimageviewを追加するにはどうすればよいですか?

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

そのように画像を割り当てることはできません。しかし、Uはこの方法でそれを行うことができます。

まず、画像のサイズを変更する関数を追加します。

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

[〜#〜] this [〜#〜] 回答への拡張クレジット。

17
Dharmesh

CellにロードするTableViewのクラスを1つ作成します。

クラス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

Swift 5の拡張

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 = UIView.ContentMode.scaleAspectFill
    imageView.image = self
    imageView.layer.cornerRadius = square.width/2
    imageView.layer.borderColor = UIColor.white.cgColor
    imageView.layer.borderWidth = 5
    imageView.layer.masksToBounds = true
    UIGraphicsBeginImageContext(imageView.bounds.size)
    imageView.layer.render(in: UIGraphicsGetCurrentContext()!)
    let result = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return result
    }
}
0
Sergey Davydov