>source

나는 약간의 손실을 입었습니다. 내 앱에서 여러 요소의 모서리를 둥글게 하기 위해 UIView의 레이어 속성을 사용했습니다. 그러나 이 하나의 UIImageView는 단순히 준수하지 않습니다. 내가 무엇을 놓치고 있는지 확실하지 않습니다.

UIImageView(previewImage라고 함)는 테이블 보기 셀에 포함됩니다. 나는 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.
}

셀이 로드되는 방식에 대해 제가 놓치고 있는 부분이 있습니까?

  • 답변 # 1

    UIImageView는 clipToBounds가 있는 cornerRadius를 제공합니다. 다음은 Swift 및 Objectiv-C의 예입니다(둥근 이미지에 대한 다음 예제 code).

    스위프트

    myImageView.layer.cornerRadius= myImageView.frame.size.height/2.0
    myImageView.clipsToBounds= true
    

    목적 -C

    [myImageView.layer setCornerRadius:myImageView.frame.size.height/2.0];
    [myImageView setClipsToBounds:TRUE];
    

  • 답변 # 2

    imageView.contentMode= .scaleAspectFillNS모서리 반경하드웨어에 따라 이미지가 매우 큰 경우에는 적용되지 않습니다.

    크기가 조정된 파노라마 이미지를 사용한 일부 테스트:

    • iPhone X, 이미지 크기 5000x1107: ???? 4000x886: ✅
    • iPhone 6s Plus, 이미지 크기 10000x2215: ???? 5000x1107: ✅
    • iPhone 6s, 이미지 크기 10000x2215: ???? 5000x1107: ✅

    160x100인 imageView 크기입니다. 흥미롭게도 최신 하드웨어가 반드시 더 나은 성능을 제공하는 것은 아닙니다.

    이 게시물을 더 많은 테스트 결과로 자유롭게 편집하세요!

  • 답변 # 3

    이전 답변의 아무 것도 작동하지 않습니까?

    UIImageView의 크기가 이미지 크기보다 큰 경우가 있습니다. 모서리 반경은 잘 설정할 수 있지만 이 경우에는 표시되지 않습니다.

    code별 UIImageView 크기 빠른 확인: (또는 XCode에서 "View UI Hierarchy" 도구를 사용할 수 있음)

    self.imageView.backgroundColor= [UIColor greenColor];
    

    이 시나리오에서는 UIImageView가 이미지와 동일한 종횡비를 갖도록 해야 합니다.

  • 답변 # 4

    Swift 4.2 답변:

    모서리 반경이 작동하도록 하려면 이미지를UIView그런 다음 이미지를 설정해야 합니다.MasksToBounds재산진실:

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

    참고: 20을 원하는모서리 반경

  • 답변 # 5

    또한 주목할 가치가 있습니다.

    1. clipsToBounds/masksToBounds와 함께 aspectFit ANDcornerRadius를 사용하는 경우 둥근 모서리가 표시되지 않습니다.

    이것이 있다면

    theImageView.contentMode= .scaleAspectFit
    

    그리고

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

    또는

    theImageView.layer.masksToBounds= true
    

    작동하지 않습니다. 당신은 aspectFit code를 제거해야 할 것입니다

    //theImageView.contentMode= .scaleAspectFit
    

    <올 시작="2">
  • 이미지 보기의 너비와 높이가 동일한지 확인
  • 간단히 말해서: AspectFit을 사용하려면 가로 세로 비율을 1:1로 설정하십시오.

    djdance2021-09-26 07:58:25

    작동하지 않습니다. aspectFit code를 제거해야 합니다.

    Shoaib Bagwan2021-09-26 19:15:13
  • 답변 # 6

    이 code를 사용해 보십시오:-

    self.imgaviewName.clipsToBounds= true
    self.imageviewName.layer.cornerRadius= 10
    

    code 전용 답변은 권장하지 않습니다. 편집을 클릭하고 code가 질문을 해결하는 방법을 요약하는 단어를 추가하거나 귀하의 답변이 이전 답변/답변과 어떻게 다른지 설명하십시오. 감사 해요

    Nick2021-09-26 06:46:25
  • 답변 # 7

    -(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;
           }
    

  • 답변 # 8

    아래 code를 시도하십시오.

    cell.previewImage.layer.cornerRadius= 20;
    cell.previewImage.clipsToBounds= YES;
    

  • 답변 # 9

    레이어의MasksToBounds재산:

    cell.previewImage.layer.masksToBounds= 예,

    그 이유는UIImageView컨트롤은 유지하기 위해 의사 하위 뷰를 만듭니다.UI이미지물체.

    뷰도 래스터화하지 않는 한(view.layer.shouldRasterize= YES) 모든 프레임에는 모든 픽셀의 재마스크가 필요합니다.

    jjxtra2021-09-25 23:20:01

    @jjxtra 그래서 shouldRasterize= false로 설정하는 것이 더 낫습니까?

    user9242021-09-26 08:41:37

    shouldRasterize가 false이면 매 프레임마다 마스크 생성 오버헤드를 지불합니다. shouldRasterize가 true이고 레이어가 모든 프레임을 변경하는 경우 마스크 오버헤드와 래스터화 오버헤드를 지불해야 합니다. 이상적인 경우는 shouldRasterize= true인 정적(매우 자주 변경되지 않는) 레이어입니다.

    jjxtra2021-09-26 08:41:37
  • 답변 # 10

    Xcode Interface Builder에서 보기에 대한 'Clip Subviews' 도면 속성 선택과 code의 모서리 반경 설정cell.previewImage.layer.cornerRadius= 20;나를 위해 일을 한다!

    IB의 'Clip Subviews' 옵션을 참조하십시오.

  • 이전 android : Post 메소드 Flutter에서 배열을 푸시하는 방법
  • 다음 python : Point 객체가 Polygon 내에 있는지 확인할 때 Shapely assertion 오류