xcode - 拖动 NSSegmentedControl 时文本模糊

标签 xcode cocoa nssegmentedcontrol

我在可拖动 View 中有一个 NSSegmentedControl (这是一个非常简化的测试用例来演示该问题)。

首次创建时,一切看起来都正常,如下图所示:

Initial View

浅绿色背景的 View 是可拖动的。如果我稍微拖动它,下部 NSSegmentedControl 中的文本就会变得“浑浊”,如下图所示:

Control with muddy text

此外,当拖动 View 时,NSSegmentedControl 中的文本会闪烁。

所有 View 和控件都在 nib 中创建,并且没有异常代码。 View 的wantLayer属性设置为YES,以便可以显示边框和背景颜色。这只是为了更容易看到问题,但即使将wantLayer设置为NO,也会出现问题。

仅当拖动 View 时才会出现此问题。拖动主应用程序窗口不会导致此效果。

这是在 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 样板。

nib 文件将可拖动 View 定义为 DraggableView 类的实例。

最佳答案

我通过更改拖动代码解决了这个问题,如下所示:

// mouseDragged - move the view

- (void) mouseDragged:(NSEvent *)theEvent {

    CGPoint newOrigin = self.startOrigin;
    newOrigin.x += theEvent.deltaX;
    newOrigin.y -= theEvent.deltaY;

    [self setFrameOrigin:newOrigin];

    _startOrigin = newOrigin;
}

此问题的根本原因是可拖动 View 原点具有非整数坐标。感谢马特为我指明了正确的方向。

关于xcode - 拖动 NSSegmentedControl 时文本模糊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62048111/

相关文章:

xcodebuild 找不到 cocoapods 库

objective-c - OSX - 使用多个表格 View - 如何检查单元格越界

cocoa - 如何在 MacOS X 中以编程方式切换键盘布局?

objective-c - 使用键盘控制 NSSegmentedControl

ios - 没有自动布局的 iphone 6 加载 Storyboard 的条件

android - 如何处理 Phonegap iOS/Android 项目并对其进行正确的版本控制?

xcode - 在模拟器中安装应用程序时,Simctl install 无法在 .app 中找到 Bundle Identifier

cocoa - 什么时候应该使用基于 NSDocument 的架构?

objective-c - NSSegmentedControl 突出显示蓝色色调和单选

cocoa - NSSegmentedControl 以编程方式突出显示段