82

リモート画像を表示するUIImageView各セルにがあります( を使用)。次のように、画像ビューにいくつかのレイヤー スタイルを適用しました。UITableViewSDWebImageQuartzCore

UIImageView *itemImageView = (UIImageView *)[cell viewWithTag:100];
    itemImageView.layer.borderWidth = 1.0f;
    itemImageView.layer.borderColor = [UIColor concreteColor].CGColor;
    itemImageView.layer.masksToBounds = NO;
    itemImageView.clipsToBounds = YES;

これで、かすかな灰色の境界線を持つ 50x50 の正方形ができましたが、正方形ではなく円形にしたいと思います。このアプリHemoglobeは、テーブル ビューで円形の画像を使用します。これが私が実現したい効果です。cornerRadiusただし、スクロール FPS が低下するため、使用したくありません。

Hemoglobeこれは循環を示していますUIImageViews

ここに画像の説明を入力

この効果を得る方法はありますか?ありがとう。

4

14 に答える 14

142

cornerRadiusを幅または高さの半分に設定するだけです(オブジェクトのビューが正方形であると仮定します)。

たとえば、オブジェクトのビューの幅と高さが両方とも 50 の場合:

itemImageView.layer.cornerRadius = 25;

更新 - ユーザー atulkhatri が指摘しているように、追加しないと機能しません。

itemImageView.layer.masksToBounds = YES;
于 2013-08-27T19:41:48.517 に答える
10

これは、IBDesignable と IBInspectable を使用して UIImageView をサブクラス化する最新の方法です。

@IBDesignable class RoundableUIImageView: UIImageView {
    private var _round = false
    @IBInspectable var round: Bool {
        set {
            _round = newValue
            makeRound()
        }
        get {
            return self._round
        }
    }
    override internal var frame: CGRect {
        set {
            super.frame = newValue
            makeRound()
        }
        get {
            return super.frame
        }

    }

    private func makeRound() {
        if self.round == true {
            self.clipsToBounds = true
            self.layer.cornerRadius = (self.frame.width + self.frame.height) / 4
        } else {
            self.layer.cornerRadius = 0
        }
    }

    override func layoutSubviews() {
            makeRound()
    }
}
于 2015-06-24T10:38:27.917 に答える
7

Yes, it is possible to give layer.cornerRadius (need to add #import <QuartzCore/QuartzCore.h>)
for create circular any control but in your case instead of set layer of UIImageView it is The Best Way to Create Your Image as circular and add it on UIImageView Which have backGroundColor is ClearColor.

Also refer this Two Source of code.

https://www.cocoacontrols.com/controls/circleview

and

https://www.cocoacontrols.com/controls/mhlazytableimages

This might be helpful in your case:

于 2013-07-18T11:19:59.077 に答える
2

Swiftを使用して使用可能なソリューションextension:

extension UIView{
  func circleMe(){
      let radius = CGRectGetWidth(self.bounds) / 2
      self.layer.cornerRadius = radius
      self.layer.masksToBounds = true
  }
}

使用法:

self.venueImageView.circleMe()
于 2016-04-12T06:29:26.753 に答える
0

cellForRowAtIndexPath メソッドですべてのものを割り当てるのではなく、テーブル ビューにカスタム セルを使用するだけで、以下の SO リンクを使用して円形の画像ビューを簡単に作成できます。

IPhoneで画像の背景でボタンを丸くする方法は?

上記のリンクは、画像ビューに使用するボタンの例を示しています。

于 2013-07-18T11:40:08.020 に答える
0

swiftviewDidLoadでは、メソッド内でuserImageアウトレットを使用します。

self.userImage.layer.borderWidth = 1;
self.userImage.layer.borderColor = UIColor.whiteColor().CGColor;
self.userImage.layer.cornerRadius = self.userImage.frame.size.width / 2;
self.userImage.clipsToBounds = true;
于 2015-12-23T15:10:23.130 に答える
0

無地の背景色の上に画像を表示する場合、簡単な解決策は、中央に透明な円があるオーバーレイ画像を使用することです。

このようにして、正方形の画像を使用し、その上に円の画像を追加して、円形の効果を得ることができます.

画像を操作したり、複雑な背景色で表示したりする必要がない場合、これはパフォーマンスに影響を与えない単純なソリューションです。

于 2013-07-18T12:13:48.583 に答える
0

Swift では、この Extension を CircularImageView または RoundedImageView に使用します。

extension UIView {

    func circular(borderWidth: CGFloat = 0, borderColor: UIColor = UIColor.whiteColor()) {
        let radius = CGRectGetWidth(self.bounds) / 2
        self.layer.cornerRadius = radius
        self.layer.masksToBounds = true

        self.layer.borderWidth = borderWidth
        self.layer.borderColor = borderColor.CGColor
    }

    func roundedCorner(borderWidth: CGFloat = 0, borderColor: UIColor = UIColor.whiteColor()) {
        let radius = CGRectGetWidth(self.bounds) / 2
        self.layer.cornerRadius = radius / 5
        self.layer.masksToBounds = true

        self.layer.borderWidth = borderWidth
        self.layer.borderColor = borderColor.CGColor
    }

}

使用法:

self.ImageView.circular()
self.ImageView.roundedCorner()
于 2016-08-11T12:58:50.473 に答える