web-dev-qa-db-ja.com

UIImageViewのコーナー半径を設定しない

私は少し損をしています。 UIViewのレイヤープロパティを使用して、アプリ内の複数の要素の角を丸めました。ただし、この1つのUIImageViewは単に準拠していません。何が欠けているのかわかりません。

UIImageView(previewImageと呼ばれる)は、Table View Cellに含まれています。 (セル自体とセルを作成するコントローラー内の)cornerRadiusプロパティの複数の場所を無効に設定しようとしました。

static NSString *CellIdentifier = @"MyTableViewCell";

MyTableViewCell *cell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
    cell = [topLevelObjects objectAtIndex:0];
    cell.previewImage.layer.cornerRadius = 20; //Made it 20 to make sure it's obvious.
}

私が行方不明になっているセルのロード方法について何かありますか?

120
MarkPowell

レイヤーのmasksToBoundsプロパティをYESに設定する必要があります。

cell.previewImage.layer.masksToBounds = YES;

これは、UIImageViewコントロールがUIImageオブジェクトを保持するための擬似サブビューを作成するためです。

361
Evan Mulawski

これは動作するはずです

cell.previewImage.clipsToBounds = YES;

cell.previewImage.layer.cornerRadius = 20;
22
Teena nath Paul

注目に値する

  1. AspectFit AND cornerRadiusをclipsToBounds/masksToBoundsとともに使用している場合、角が丸くなることはありません。

つまり、これがある場合

theImageView.contentMode = .scaleAspectFit

そして

   theImageView.layer.cornerRadius = (theImageView.frame.size.height)/2
    theImageView.clipsToBounds = true

または

theImageView.layer.masksToBounds = true

それ動作しません。 aspectFitコードを取り除く必要があります

//theImageView.contentMode = .scaleAspectFit
  1. 画像ビューの幅と高さが同じであることを確認してください
22
Naishta

以下を設定する必要があると思います。

cell.previewImage.layer.masksToBounds = YES;
cell.previewImage.layer.opaque = NO;
11
Daniel Dickison

Xcode Interface Builderで、ビューの[クリップサブビュー]描画属性を選択し、コードcell.previewImage.layer.cornerRadius = 20;の角の半径を設定すると、作業がうまくいきます。

IBの「クリップサブビュー」オプションを参照

4
koira

以下のコードを試してください

cell.previewImage.layer.cornerRadius = 20;
cell.previewImage.clipsToBounds = YES;
2
Vaibhav Thakre

このコードを試してください:-

self.imgaviewName.clipsToBounds = true
self.imageviewName.layer.cornerRadius = 10
1
kangna sharma

Swift 4.2回答:

コーナーの半径を機能させるには、画像をUIViewに追加してから、画像のmasksToBoundsプロパティをtrueに設定する必要があります。

planeImage.layer.masksToBounds = true
planeImage.layer.cornerRadius = 20

注:20を目的のcornerRadiusに置き換えます

0
IronmanX46
-(void) viewDidAppear:(BOOL)animated{
       [super viewDidAppear:animated];
       [self setMaskTo:viewDistance 
             byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight];
           }

- (void)setMaskTo:(UIView*)view byRoundingCorners:(UIRectCorner)corners
     {
      UIBezierPath *rounded = [UIBezierPath 
                bezierPathWithRoundedRect:view.bounds
                                              byRoundingCorners:corners

                     cornerRadii:CGSizeMake(20.0, 20.0)];

          CAShapeLayer *shape = [[CAShapeLayer alloc] init];
          shape.frame = self.view.bounds;
         [shape setPath:rounded.CGPath];
          view.layer.mask = shape;
       }
0
Maulik Patel