를, 애플이 10.6 이전에 수행 된 방법 대신 NSView의 주위에 초점 링을 그리는 기초하여 객체를 방법으로 drawFocusRingMask
및 focusRingMaskBounds
방법을 사용하여 제안 (drawRect:
에 NSSetFocusRingStyle()
를 사용하여). (release notes 참조). : OSX 10.7로
은 OSX 10.10에서 테스트 :
- (void)drawFocusRingMask {
NSRectFill([self bounds]);
}
- (NSRect)focusRingMaskBounds {
return [self bounds];
}
이 NSTextView는 프로그래밍 방식으로 콘텐츠보기에 직접 추가됩니다 (어떤 스크롤하지 않고 : 제안 나는 기본적인 초점 링을 구현하는를 NSTextView의 하위 그리기 한
보기).이 방법은 대부분 잘 작동하지만 scaleUnitSquareToSize:을 사용하여 NSTextView의 크기를 조절할 때 그려지는 포커스 링은 완전히 올바르지 않습니다.
그래서 전화 :
[textView scaleUnitSquareToSize:NSMakeSize(1.5, 1.5)];
은 다음과 같습니다
위 또는 초점 링 RECT의 더욱 왜곡의 결과를 더 아래를 확장. NSTextView의 배율을 {1.0, 1.0}으로 재설정하면 포커스 링이 다시 올바르게 그려집니다.
나는 이것이 포커스 링 코드의 일종의 버그라고 가정합니다. drawFocusRingMask
/focusRingMaskBounds
(내부 클래스 _NSAutomaticFocusRing
이 이에 대한 책임이 있음)을 호출하기 전에 초점 링을 그리는 데 사용 된 그래픽 컨텍스트의 변형을 수행하는 것으로 보입니다.
어떻게 해결할 수 있습니까? 컨텍스트를 적절한 좌표로 변환하는 방법을 찾아야합니까 (지금까지 성공하지 못했습니다)? 아니면 포커스 링이 올바르게 작동하도록하는 다른 방법이 있습니까?
스케일링이 좌표계의 원점에서 수행된다는 사실과 관련이 있습니까? – FlyingPiMonster
다른 그래픽 컨텍스트에서 _NSAutomaticFocusRing에 의해 별도로 그려지기 때문에 뷰의 크기 조정은 포커스 링에 직접 영향을 미치지 않습니다. _NSAutomaticFocusRing은 뷰를 쿼리하고 뷰의 좌표를 기반으로 변환을 수행하며 문제가 있다고 생각합니다. – danielv