내보기의 일부를 확대/축소하기 위해 사용자 정의보기에서 이동 가능한 돋보기 (복사하여 붙여 넣을 때와 같이)를 만들 수 있습니다.iPhone에서 돋보기 효과를 재현하십시오.
시작하는 방법에 대해 알지 못합니다. 아이디어가 있습니까?
미리 도움을 주셔서 감사합니다.
내보기의 일부를 확대/축소하기 위해 사용자 정의보기에서 이동 가능한 돋보기 (복사하여 붙여 넣을 때와 같이)를 만들 수 있습니다.iPhone에서 돋보기 효과를 재현하십시오.
시작하는 방법에 대해 알지 못합니다. 아이디어가 있습니까?
미리 도움을 주셔서 감사합니다.
우리는 이것을 크로스 워드로합니다. drawRect 메서드에서 돋보기의 '마스크'가 포함 된 단색 비트 맵을 사용하여 원을 마스크 처리하고 2 배 스케일 변환을 사용하여 대상 뷰를 그립니다. 그 위에 돋보기 이미지를 그으면 끝난 것입니다.
- (void) drawRect: (CGRect) rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect bounds = self.bounds;
CGImageRef mask = [UIImage imageNamed: @"loupeMask"].CGImage;
UIImage *glass = [UIImage imageNamed: @"loupeImage"];
CGContextSaveGState(context);
CGContextClipToMask(context, bounds, mask);
CGContextFillRect(context, bounds);
CGContextScaleCTM(context, 2.0, 2.0);
//draw your subject view here
CGContextRestoreGState(context);
[glass drawInRect: bounds];
}
정말 흥미로운 소리. 반영을 모방하려고하는 오버레이를 추가해야합니다. 나는 그것을 시험 할 것이다. 고마워요! –
잘 작동합니다. 감사합니다 –
코드는 비 눈금 영역의 그림자를 지원하지 않습니다! 이 문제를 해결하는 방법? – Dmitry
나는 스위프트 3에서이 코드를 사용 :
class MagnifyingGlassView: UIView {
var zoom: CGFloat = 2 {
didSet {
setNeedsDisplay()
}
}
weak var readView: UIView?
// MARK: - UIVIew
override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupView()
}
override func draw(_ rect: CGRect) {
guard let readView = readView else { return }
let magnifiedBounds = magnifyBounds(of: readView, zoom: zoom)
readView.drawHierarchy(in: magnifiedBounds, afterScreenUpdates: false)
}
// MARK: - Private
private func setupView() {
isOpaque = false
backgroundColor = UIColor.clear
}
private func magnifyBounds(of view: UIView, zoom: CGFloat) -> CGRect {
let transform = CGAffineTransform(scaleX: zoom, y: zoom)
var bounds = view.bounds.applying(transform)
bounds.center = view.bounds.center
return view.convert(bounds, to: self)
}
}
extension CGRect {
var center: CGPoint {
get {
return CGPoint(x: origin.x + width/2, y: origin.y + height/2)
}
set {
origin.x = newValue.x - width/2
origin.y = newValue.y - height/2
}
}
}
당신은 당신의 읽기 뷰가있는 ScrollView 경우 scrollViewDidScroll:
에 setNeedsDisplay
를 호출해야합니다.
흥미로운 질문입니다. 아이디어가 없습니다. –