NSView
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
NSView is an AppKit class. It's role as a superclass is to provide most of the core functionality and services that specific GUI classes (such as NSButton or NSMenuView) use to display/render and handle events.
Code chunks
Dragging objects
Note: following code can be somehow optimised by adding small 0.01s delay or something like that. If someone knows how to, please write it here.
Implement the mouseDown: method:
- (void)mouseDown:(NSEvent *)event { NSPoint oldPoint; NSEvent *presentEvent; NSEventType eventType = [event type]; unsigned int eventMask = NSLeftMouseDownMask | NSLeftMouseUpMask | NSLeftMouseDraggedMask; NSPoint point; float dx,dy; NSPoint location; point = [self convertPoint:[event locationInWindow] fromView:nil]; oldPoint = point; do { while (event && eventType != NSLeftMouseUp) { presentEvent = event; event = [NSApp nextEventMatchingMask: eventMask untilDate: [NSDate distantPast] inMode: NSEventTrackingRunLoopMode dequeue: YES]; eventType = [event type]; } point = [self convertPoint: [presentEvent locationInWindow] fromView: nil]; dx = point.x - oldPoint.x; dy = point.y - oldPoint.y; [self scrollRectToVisible:frame];
Add code here:
// // here move the dragged thing by: dx, dy // ....
Then finish the loop:
[self setNeedsDisplay:YES]; oldPoint = point; if (eventType == NSLeftMouseUp) { break; } event = [NSApp nextEventMatchingMask: eventMask untilDate: nil inMode: NSEventTrackingRunLoopMode dequeue: YES]; eventType = [event type]; } while (eventType != NSLeftMouseUp); [self setNeedsDisplay:YES]; }