У меня есть NSSegmentedControl в перетаскиваемом представлении (это значительно упрощенный тестовый пример, демонстрирующий проблему).
При первом создании все выглядит нормально, как на этом изображении:
Вид со светло-зеленым фоном можно перетаскивать. Если я слегка перетащу его, текст в нижнем элементе NSSegmentedControl станет «грязным», как на этом изображении:
Кроме того, пока отображается представление при перетаскивании текст в NSSegmentedControl мерцает.
Все представления и элементы управления создаются в виде пера, и нет необычного кода. Для свойства WishLayer представления установлено значение YES, чтобы можно было отобразить цвет границы и фона. Это сделано для того, чтобы упростить выявление проблемы, но проблема возникает, даже если для параметра wantLayer установлено значение NO.
Проблема возникает только при перетаскивании представления. Перетаскивание главного окна приложения не вызывает этого эффекта.
Это на MacOS High Sierra 10.13.6, XCode 10.1
Это сводит меня с ума, поэтому любая помощь приветствуется!
Edit: Вот код перетаскивания:
//
// DraggableView.h
//
#import <Cocoa/Cocoa.h>
@interface DraggableView : NSView
@property(assign,nonatomic) NSPoint dragStart;
@property(assign,nonatomic) NSPoint startOrigin;
@end
//
// DraggableView.m
//
#import "DraggableView.h"
@implementation DraggableView
// mouseDown - start dragging
- (void) mouseDown:(NSEvent *)theEvent {
_dragStart = [[self superview] convertPoint:[theEvent locationInWindow] fromView:nil];
_startOrigin = [self frame].origin;
}
// mouseDragged - move the view
- (void) mouseDragged:(NSEvent *)theEvent {
CGPoint currentDrag = [[self superview] convertPoint:[theEvent locationInWindow] fromView:nil];
CGPoint newOrigin = self.startOrigin;
newOrigin.x += (currentDrag.x - _dragStart.x);
newOrigin.y += (currentDrag.y - _dragStart.y);
[self setFrameOrigin:newOrigin];
}
@end
Весь другой код является стандартным шаблоном Cocoa для приложения на основе документа.
Файл пера определяет перетаскиваемое представление как экземпляр класс DraggableView.