У меня есть NSSegmentedControl в перетаскиваемом представлении (это очень упрощенный тестовый пример для демонстрации проблемы).
При первом создании все выглядит нормально, как на этом изображении:
Вид со светло-зеленым фоном можно перетаскивать. Если я слегка перетащу его, текст в нижнем NSSegmentedControl станет «мутным», как на этом изображении:
Кроме того, во время перетаскивания представления текст в NSSegmentedControl мерцает.
Все представления и элементы управления создаются в одном фрагменте, и в нем нет необычного кода. Для свойства WantLayer представления задано значение YES, чтобы можно было отобразить цвет границы и фона. Это просто для того, чтобы было легче увидеть проблему, но проблема возникает, даже если для параметра wantLayer установлено значение NO.
Проблема возникает только при перетаскивании вида. Перетаскивание главного окна приложения не вызывает этого эффекта.
Это на MacOS High Sierra 10.13.6, XCode 10.1
Это сводит меня с ума, поэтому любая помощь приветствуется!
Изменить: вот код перетаскивания:
//
// 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.