I started wondering after I saw jerky scrolling in my app when it draws a lot of curves (NSBezierPath), under Sonoma.
So I made a simple Cocoa app, using the Xcode 15 objC template. The app only has a NSView
subclass as a document view of an NSScrollView
(not a subclass), which has copiesOnScroll
set to YES.
The document view returns YES
to isOpaque
and its class returns YES
to isCompatibleWithResponsiveScrolling
.
Yet whenever I scroll, -drawRect
is called on the document view and the dirtyRect
passed is the same as its visibleRect
. i.e., the view is asked to redraw its whole visible content at every scroll step. Clearly, responsive scrolling isn't working.
I tried setting wantsLayer
to YES
or NO,
it doesn't change anything.
prepareContentInRect
is called, but it doesn't seem that the rect
argument covers a region of the view that is not visible.
Am I doing something wrong or is responsive scrolling a thing of the past?