Hi J.Varela,
i too faced the same problem... and i found that "inertial scrolling" has the reason for this misbehaviour. so "disable the inertia scrolling" will solve this problem. just add the following line to your application init method... * [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"AppleMomentumScrollSupported"];//disable the inertia scrolling * Thanks & Regards, Muthu On Wed, Jul 15, 2015 at 3:38 PM, João Varela <joaocvar...@gmail.com> wrote: > Hi, > > I am implementing two custom classes, one of them is the document view > inside an NSScrollView and the other is a subview of the document view. I > need to create two NSTrackingArea’s to display the appropriate cursor when > the mouse hovers over specific areas of the subviews. As instructed by > Apple, I implemented an -updateTrackingAreas method to update the tracking > areas when needed. Everything works as expected if the window and its views > and subviews are resized or if the app is re-activated or the window > becomes the key window again. Everything works well too when the user > scrolls up or down to the end of the document view. The NSTrackingArea’s > are updated correctly and the -updateTrackingAreas method is called in all > these occasions. > > However, none of this happens when the user only scrolls (up or down) a > little and does not reach the top or bottom of the document view. In this > case, not only the -updateTrackingAreas method of the subview is not > called, but also the cursor is no longer updated properly, because the > NSTrackingArea’s of the subviews have not updated correctly. It seems as > though I am not the only one getting bitten by this problem. See here: > > > http://stuccy.com/questions/17731292/mouseovers-in-nscollectionviewnsscrollview > < > http://stuccy.com/questions/17731292/mouseovers-in-nscollectionviewnsscrollview > > > > I tried to circumvent this problem by detecting when the origin.y of the > document view rect is not changing anymore within the NSScrollView (this is > not easy on OS X because there is no notification to tell us when scrolling > ended if you want to support OS X 10.8). For this purpose, I added a method > in a NSScrollView subclass that does just that: > > - (void)updateTrackingAreas > { > if (_y != self.documentVisibleRect.origin.y) > { > _y = self.documentVisibleRect.origin.y; > > if (!_isScheduled) > { > dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 > * NSEC_PER_SEC)), > dispatch_get_main_queue(), > ^{ > if (_y != self.documentVisibleRect.origin.y) > { > [self updateTrackingAreas]; > } > else > { > [_documentView updateTrackingAreas]; > } > > _isScheduled = NO; > }); > > _isScheduled = YES; > } > } > } > > This method is called every time the user uses the scroll wheel as it is > invoked inside the -scrollWheel method of the NSScrollView subclass. It > works as expected and coalesces all the scroll wheel events into just one > call. When the scrolling stops, indeed the [_documentView > updateTrackingAreas] is called, which then invokes the subview’s > -updateTrackingAreas method. This should do the trick, but it doesn’t. > > Thus, before I try the solution given in the link above, which I find even > more hacky than my own solution, is there something that I am missing? Why > wouldn’t the NSTrackingArea’s update correctly when they do so if the > window is resized or becomes key again or the user scrolls up or down to > the end? What is the OS doing in these situations that I am not doing here? > > I would appreciate any feedback, > > J. Varela > _______________________________________________ > > Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) > > Please do not post admin requests or moderator comments to the list. > Contact the moderators at cocoa-dev-admins(at)lists.apple.com > > Help/Unsubscribe/Update your Subscription: > https://lists.apple.com/mailman/options/cocoa-dev/muthulingam.a%40gmail.com > > This email sent to muthulinga...@gmail.com _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com