나는이 UIImageView
내의 각 UITableView
디스플레이 원격 이미지 (사용하는 것으로, 세포 SDWebImage
). 다음 QuartzCore
과 같이 이미지보기에 레이어 스타일을 지정했습니다.
UIImageView *itemImageView = (UIImageView *)[cell viewWithTag:100];
itemImageView.layer.borderWidth = 1.0f;
itemImageView.layer.borderColor = [UIColor concreteColor].CGColor;
itemImageView.layer.masksToBounds = NO;
itemImageView.clipsToBounds = YES;
이제 희미한 회색 테두리가있는 50×50 정사각형이 있지만 정사각형 대신 원형으로 만들고 싶습니다. 이 앱 Hemoglobe
은 테이블 뷰에서 원형 이미지를 사용하며, 이것이 제가 달성하고 싶은 효과입니다. 그러나 cornerRadius
스크롤링 FPS가 저하되므로을 사용하고 싶지 않습니다 .
다음은 Hemoglobe
원형을 보여줍니다 UIImageViews
.
이 효과를 얻을 수있는 방법이 있습니까? 감사.
답변
cornerRadius
너비 또는 높이의 절반으로 설정하기 만하면됩니다 (개체보기가 정사각형이라고 가정).
예를 들어 개체보기의 너비와 높이가 모두 50 인 경우 :
itemImageView.layer.cornerRadius = 25;
업데이트-사용자 atulkhatri가 지적했듯이 다음을 추가하지 않으면 작동하지 않습니다.
itemImageView.layer.masksToBounds = YES;
답변
테두리를 추가하려면
self.ImageView.layer.borderWidth = 3.0f;
self.ImageView.layer.borderColor = [UIColor whiteColor].CGColor;
원형 용
self.ImageView.layer.cornerRadius = self.ImageView.frame.size.width / 2;
self.ImageView.clipsToBounds = YES;
이 링크 참조
http://www.appcoda.com/ios-programming-circular-image-calayer/
답변
이 코드를 사용하십시오 .. 도움이 될 것입니다 ..
UIImage* image = ...;
UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, 1.0);
// Add a clip before drawing anything, in the shape of an rounded rect
[[UIBezierPath bezierPathWithRoundedRect:imageView.bounds
cornerRadius:50.0] addClip];
// Draw your image
[image drawInRect:imageView.bounds];
// Get the image, here setting the UIImageView image
imageView.image = UIGraphicsGetImageFromCurrentImageContext();
// Lets forget about that we were drawing
UIGraphicsEndImageContext();
그것은 나를 위해 잘 작동합니다. 🙂
답변
다음은 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()
}
}
답변
네, 제공 할 수 있습니다 layer.cornerRadius
(추가해야
#import <QuartzCore/QuartzCore.h>
)
모든 컨트롤을 원형 만들뿐만 귀하의 경우 대신 세트를 layer
의 UIImageView
이 원형으로 이미지를 만들고 그것을 추가하는 가장 좋은 방법은 UIImageView
어떤이 backGroundColor
있다 ClearColor
.
이 두 가지 코드 소스도 참조하십시오.
https://www.cocoacontrols.com/controls/circleview
과
https://www.cocoacontrols.com/controls/mhlazytableimages
이것은 귀하의 경우에 도움이 될 수 있습니다.
답변
UIImageView의 높이와 너비를 동일하게 설정하십시오 (예 : Height=60
& Width = 60
). 그러면 cornerRadius
정확히 절반이어야합니다.
self.imageView.layer.cornerRadius = 30;
self.imageView.layer.borderWidth = 3;
self.imageView.layer.borderColor = [UIColor whiteColor].CGColor;
self.imageView.layer.masksToBounds = YES;
답변
일부 자동 레이아웃과 다른 셀 높이를 사용하는 경우 다음과 같이하는 것이 좋습니다.
override func layoutSubviews() {
super.layoutSubviews()
logo.layer.cornerRadius = logo.frame.size.height / 2;
logo.clipsToBounds = true;
}