UIImageView
의를 준비 할 필요가
I 녹색 원 주위에 투명도가 필요하기 때문에 borderWidth
을 사용할 수 없습니다. 내 앱에는 배경 이미지보기가 있으므로 borderWidth
사용자는 이미지 주위에 검정색 테두리 선이 표시되거나 clearColor
을 사용하면 아무 것도 볼 수 없습니다. 어떤 제안?
UIImageView
의를 준비 할 필요가
I 녹색 원 주위에 투명도가 필요하기 때문에 borderWidth
을 사용할 수 없습니다. 내 앱에는 배경 이미지보기가 있으므로 borderWidth
사용자는 이미지 주위에 검정색 테두리 선이 표시되거나 clearColor
을 사용하면 아무 것도 볼 수 없습니다. 어떤 제안?
레이어 마스크를 사용하여이 작업을 수행 할 수 있습니다.
스위프트 2.3
let mask = CAShapeLayer()
let path = CGPathCreateMutable()
let center = view.convertPoint(statusImageView.center, toView: profileImageView)
let radius = statusImageView.frame.width/2 + 4
CGPathAddRect(path, nil, profileImageView.bounds)
CGPathAddArc(path, nil, center.x, center.y, radius, 0, CGFloat(2 * M_PI), false)
mask.fillRule = kCAFillRuleEvenOdd
mask.path = path
profileImageView.layer.mask = mask
profileImageView.clipsToBounds = true
스위프트 3
let mask = CAShapeLayer()
let path = CGMutablePath()
path.addRect(profileImageView.bounds)
path.addArc(
center: view.convert(statusImageView.center, to: profileImageView),
radius: statusImageView.frame.width/2 + 4,
startAngle: 0,
endAngle: CGFloat(2 * M_PI),
clockwise: false
)
mask.fillRule = kCAFillRuleEvenOdd
mask.path = path
profileImageView.layer.mask = mask
profileImageView.clipsToBounds = true
UPDATE
class MatchViewController: UIViewController {
// MARK: Outlets
@IBOutlet var matchedImageView: UIImageView!
@IBOutlet var profileImageView: UIImageView!
@IBOutlet var tickImageView: UIImageView!
// MARK: Properties
var innerContainer: UIView! { return profileImageView.superview }
var outerContainer: UIView! { return innerContainer?.superview }
// MARK: Lifecycle
override func preferredStatusBarStyle() -> UIStatusBarStyle { return .LightContent }
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
let mask = CAShapeLayer(),
path = CGPathCreateMutable()
let center = outerContainer.convertPoint(tickImageView.center, toView: innerContainer),
radius = tickImageView.frame.width/2 + 4
CGPathAddRect(path, nil, innerContainer.bounds)
CGPathAddArc(path, nil, center.x, center.y, radius, 0, CGFloat(2 * M_PI), false)
mask.fillRule = kCAFillRuleEvenOdd
mask.path = path
innerContainer?.layer.mask = mask
innerContainer?.clipsToBounds = true
}
}
조회수가 이렇게 구성되어 있는지 확인하십시오.
이
는 결과가 될 것이다. 해야합니다.이미지에 클리핑을 사용하고 UIImageView
대신 사용자 정의보기를 사용할 수 있습니다. 클리핑 경로를 계산하려면 intersection of two circles이 필요합니다.
고맙습니다! 나는'CGMutablePath'에 접근 가능한 이니셜 라이저가 없기 때문에 생성 할 수 없다는 에러를 얻었습니다. xcode 8 및 swift 2.3을 사용합니다. – Ilya
오, 신속한 사용을 가정했습니다. – Callam
2.3 및 3 모두 내 대답을 업데이트했습니다. – Callam