UIImageView에서 필렛을 추가하는 몇 가지 방법
UIImageView 객체를 작성하려면 다음과 같이 하십시오.
UIImageView * poImgView = [[UIImageView alloc] init];
첫번째 방법
poImgView.layer.cornerRadius = poImgView.frame.size.width/2.0;
poImgView.layer.masksToBounds = YES;
( poImgView.clipsToBounds = YES;)
clipsToBounds는view에 대한 절단이고 masksToBounds는layer에 대한 절단입니다.
성능 소모: 이것은 스크린 렌더링(off-screen-rendering)으로 성능에 대한 소모가 비교적 크다.fps는 대체로 45 프레임 정도(cell당 2개의imageview)(정상 fps는 60 프레임으로 작을수록 사용자 체험이 떨어진다).
리플렉스 렌더링은 현재 화면 버퍼 외부에 GPU가 렌더링 작업을 위해 새로운 버퍼를 여는 것을 의미합니다.위의 결론에 의하면 보기와 원각의 크기는 프레임률에 아무런 영향을 주지 않고 수량이야말로 피해의 핵심 출력이다.스크린에서 렌더링하는 데 걸리는 시간은 스크린에서 렌더링하는 동작이 아니라 스크린에서 렌더링하는 동작에서 발생한다는 것을 알 수 있다.왜 이렇게 화면을 떠나는 데 시간이 걸립니까?원인은 주로 버퍼 생성과 상하문 전환이 있습니다.새로운 버퍼를 만드는 대가가 크지 않고, 가장 큰 대가를 치르는 것은 상하문 전환이다.
두 번째 방법
CAShapeLayer *layer = [CAShapeLayer layer];
UIBezierPath *aPath = [UIBezierPath bezierPathWithOvalInRect:aImageView.bounds];
layer.path = aPath.CGPath;
poImgView.layer.mask = layer;
성능 소모: 테스트 fps는 대략 20 프레임 정도이고 방안 A의 소모보다 크다.
세 번째 방법
- (UIImage *)imageWithCornerRadius:(CGFloat)radius {
CGRect rect = (CGRect){0.f, 0.f, self.size};
UIGraphicsBeginImageContextWithOptions(self.size, NO, UIScreen.mainScreen.scale);
CGContextAddPath(UIGraphicsGetCurrentContext(),[UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:radius].CGPath);
CGContextClip(UIGraphicsGetCurrentContext());
[self drawInRect:rect];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
성능 소모: 이것은on-screen-rendering은 시시각각 렌더링을 하는 것과 같고 A.B 방안의 오프라인 렌더링에 비해 성능 소모가 가장 적기 때문에 이 방안을 추천합니다.
특히 첫 번째와 두 번째 방법은 모두 비교적 흔히 볼 수 있는 방식이지만 모두 추천하지 않는다. 이에 대한 최적화 방안은 세 번째 방식이지만 굳이 첫 번째와 두 번째 방법을 사용해야 한다면 보완 조치는 다음과 같다.
self.layer.shouldRasterize = YES;
self.layer.rasterizationScale = [UIScreen mainScreen].scale;
shouldRasterize가true로 설정되었을 때,layer는bitmap으로 렌더링되고 캐시되어 있으며, 다음에 사용할 때 다시 렌더링되지 않습니다.
원각을 실현하는 것 자체가 색 혼합(blending)을 하는 것이다. 만약에 페이지가 나올 때마다blending이 너무 많이 소모된다면 이때shouldRasterize=yes, 다음에는 렌더링 엔진의cache에서 그bitmap을 간단하게 읽고 시스템 자원을 절약할 뿐이다.
TableView를 스크롤할 때, 매번 원각 설정을 실행하면 UI를 막을 것입니다. 이 설정을 사용하면 슬라이딩이 더욱 원활해질 것입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.