UIViewContentModeScaleAspectFill이 클리핑되지 않음
다음을 사용하여 고정 크기(100x100)로 섬네일 이미지를 그리려고 합니다.UIImageView
이미지 보기의 프레임 크기를 100x100으로 설정하고 다음을 설정합니다.contentMode
UIViewContentModeScaleAspectFill
.
이렇게 하면 이미지가 내가 설정한 크기로 그려지고 이미지의 영역이 채워지며 이미지 보기에 대해 설정한 크기를 벗어나는 이미지의 모든 부분이 클리핑됩니다.그러나 이미지는 여전히 제가 설정한 100x100 크기보다 크거나 작게 그려집니다.
제가 설정하면,contentMode
UIviewContentModeScaleToFill
그런 다음 이미지가 정확히 100x100으로 그려지지만 해당 치수에 맞게 왜곡됩니다.애스펙트 필이 예상대로 클리핑되지 않는 이유가 무엇입니까?
내 코드는 다음과 같습니다.
_photoView = [[UIImageView alloc] initWithImage:photoImage];
_photoView.contentMode = UIViewContentModeScaleAspectFill;
[self addSubview:_photoView];
CGRect photoFrame = _photoView.frame;
photoFrame.size = CGSizeMake(100, 100);
_photoView.frame = photoFrame;
더 잘 설명하기 위해, 여기 제가 보고 있는 것의 스크린샷이 있습니다.은 녹색사은다같습다니과음형입니다.UIView
을포하는을 UIImageView
같이 일하고 있습니다.배경색은 녹색으로, 뷰 프레임은 100x100으로 설정했습니다., 스트로테,,UIImageViews
크기는 50x50입니다. 피시다를 할 때, 사할때를 합니다....AspectFill
이미지 크기가 50x50으로 조정되지 않고 일부 경우에는 원하는 위치에서 오프셋됩니다.을 할 때...ScaleToFill
크기는 맞지만 이미지가 왜곡되어 있습니다.
클립을 경계로 설정해 볼 수 있습니까?
[_photoview setClipsToBounds:YES];
또는 다음과 같은 작업을 수행할 수 있는 경우 스토리보드/Xib에서 직접 수행할 수 있습니다.
당신의 지식을 확장하고 싶다면 iOS UIView 스택이 렌더링되는 방법에 대한 정말 좋은 기사가 있습니다.전체 도면 파이프라인에 대한 보다 심층적인 기사도 있습니다.
요약:
래스터화 - 뷰의 모든 콘텐츠가 뷰 경계의 좌표 공간에서 래스터화됩니다(그림 또는 화면 밖 픽셀 버퍼).이미지 데이터 또는 사용자 지정 도면(예:
drawRect:
내용을 하위 보기로 합니다.이 래스터라이제이션은 다음을 고려합니다.contentMode
소유물.보기 범위를 벗어나는 모든 항목은 삭제됩니다.
구성 - 결과가 하위 뷰에서 상위 뷰로 구성됩니다(서로 위에 그려짐).하위 뷰의 프레임 속성을 사용합니다.
에 약에만.
clipsToBounds
은 재은입니다.YES
그러면 하위 보기 내용이 범위를 벗어나면 삭제됩니다.
에서 동일한 문제가 발생했으며 "Clip Subviews"를 클릭하여 해결했습니다.
이미지가 스토리보드 미리 보기에서 모든 보기(3.5, 4, 4.7, 5.5, ipad)에 대해 제대로 표시되었지만 시뮬레이터에는 표시되지 않았습니다.
"Clip Subviews"를 선택한 후 문제가 해결되었습니다.:)
스토리보드/Xib에서 "Clip subviews"를 직접 확인하는 것도 도움이 되었습니다.
서브뷰의 크기를 조정하고 있었는데 xib에 자동 레이아웃이 설정되어 있기 때문이라는 것을 깨달았습니다.
모든 게 실패하면,
뷰DidLayoutSubviews 메서드에서 클립을 경계까지 수행합니다.
예:
override func viewDidLayoutSubviews() {
imageProfile.layer.cornerRadius = imageProfile.bounds.size.width/2
imageProfile.clipsToBounds = true
imageProfile.layer.masksToBounds = true
}
언급URL : https://stackoverflow.com/questions/6638623/uiviewcontentmodescaleaspectfill-not-clipping
'programing' 카테고리의 다른 글
SQL에서 동일한 쿼리에 여러 뷰를 만든 다음 이 뷰를 결합하려면 어떻게 해야 합니까? (0) | 2023.06.16 |
---|---|
공용 VAPID 키를 찾을 수 있는 Firebase 클라우드 메시징 (0) | 2023.06.16 |
DataTable이 이미 다른 DataSet에 속합니다. (0) | 2023.06.16 |
데이터 프레임에서 열 순서를 변경하려면 어떻게 해야 합니까? (0) | 2023.06.16 |
Scala에서 Excel 파일을 읽는 방법 (0) | 2023.06.16 |