标签: appkit

NSTextView,附加文本和平滑滚动

我试图在我实现的聊天历史视图中实现平滑滚动,但是如果我追加的内容足够大,则平滑滚动只会滚动几行.

我的第一个猜测是视图没有重绘自己..不是这样,即使用-display强制立即绘图它仍然会破坏.

- (void)scrollAnimated:(BOOL)animated
{
    if( animated )
    {
        NSClipView *clipView = [[_chatHistoryView enclosingScrollView] contentView];

        [NSAnimationContext beginGrouping];
        [[NSAnimationContext currentContext] setDuration:0.100f];
        NSPoint constrainedPoint = [clipView constrainScrollPoint:NSMakePoint(0, CGFLOAT_MAX)];
        [[clipView animator] setBoundsOrigin:constrainedPoint];
        [NSAnimationContext endGrouping];
    }
    else
    {
        NSRange range;
        range.location = [[_chatHistoryView textStorage] length];
        range.length = 1;
        [_chatHistoryView scrollRangeToVisible:range];
    }
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

macos cocoa objective-c appkit smooth-scrolling

12
推荐指数
1
解决办法
1152
查看次数

设置窗口可调整大小

在IB中,可以通过选中"调整大小"复选框来轻松完成.我的问题是我希望我的主要NSWindow不能调整大小,直到点击一个按钮,然后我希望它可以调整大小.

我在互联网上搜索但找不到任何东西?窗口不能调整大小或不能以编程方式调整大小吗?

在此先感谢大家!

cocoa appkit nswindow

12
推荐指数
2
解决办法
9621
查看次数

如何在NSTextView中统一缩放富文本?

背景:

我有一个普通的基于文档的Cocoa Mac OS X应用程序,它使用NSTextView富文本输入.用户可以编辑文本的字体系列,点大小和颜色NSTextView.

基础SDK:10.7
部署目标:10.6


题:

我想NSTextView在用户编辑文本时以编程方式(包括)实现整个UI的缩放.缩放框架NSTextView是没有问题的.但我不知道如何缩放视图中的可编辑文本,该文本可能在整个文本运行的不同子部分中包含多个不同的点大小.

如何将统一比例因子应用于显示的富文本NSTextView

这应该与"富文本",使得用户的字体,颜色发挥很好,尤其是点大小(这可能是在文字的运行的不同位置有不同)将被保留,但按比例均匀/相对.

这可能是我的Base SDK和部署目标吗?是否可以使用较新的Base SDK或部署目标?

cocoa objective-c nstextview appkit

12
推荐指数
2
解决办法
1752
查看次数

NSCollectionView拖放占位符大小

我已经成功地拖延了我的工作NSCollectionView,但是视觉外观和行为存在一些问题.主要问题是放置区/占位符的大小错误,即它小于集合视图的大小minItemSize.我已经搜索了文档,但看不出任何指定方法.

我的第二个问题是,我希望单元格图像在被拖动时实际移动,而不是仅仅具有半透明副本.

这是当前的行为:

目前的行为

这是我想要的行为(在Sketch中使用):

期望的行为

任何建议将不胜感激.如果任何代码有用,请告诉我 - 我不确定哪些部分与解决这个问题相关.谢谢!

macos cocoa drag-and-drop appkit nscollectionview

12
推荐指数
0
解决办法
285
查看次数

如何在Mac OS X上绘制桌面?

我想在Mac OS X(Snow Leopard)上绘制桌面.具体来说,我想达到与运行相同的效果:

/System/Library/Frameworks/ScreenSaver.framework/Resources/
ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background
Run Code Online (Sandbox Code Playgroud)

(如果您不在计算机附近,则会显示您通常会看到桌面背景的屏幕保护程序.)

我知道如何创建一个没有边框的窗口(通过子类化NSWindow并重写initWithContentRect:styleMask:backing:defer:将窗口样式设置为NSBorderlessWindowMask)并且没有阴影(setHasShadow:NO.)

我知道我可以调用setLevel:kCGDesktopWindowLevel或kCGDesktopIconWindowLevel将我的窗口放在其他窗口下面(参见问题418791.)然而,这并不是我想要的,因为此级别的窗口仍然位于桌面图标的顶部.我想要在桌面背景之上,但在图标下面.

我的观点不透明.如果有一种技术可以破坏桌面背景,那就没问题.

macos cocoa appkit

11
推荐指数
1
解决办法
4050
查看次数

使用Swift处理AppKit中的键盘事件

我有一个自定义的NSView子类,需要处理一些键盘事件.在Objective-C中,我可能会这样处理它:

-(void)keyDown:(NSEvent *)event
{
    unichar ch = [[event charactersIgnoringModifiers] characterAtIndex:0];

    if (ch == NSUpArrowFunctionKey && (event.modifierFlags & NSCommandKeyMask)) {
        // Scroll to top
        return;
    }
    else if (ch == NSDownArrowFunctionKey && (event.modifierFlags & NSCommandKeyMask)) {
        // Scroll to bottom
        return;
    }

    switch (ch) {
        case NSRightArrowFunctionKey:
            // Select the current row
            return;
        case ' ':
            // Scroll down one page
            return;
        default:
            break;
    }

    [super keyDown:event];
}
Run Code Online (Sandbox Code Playgroud)

但是,在Swift中,characterAtIndex:返回a unichar,while NSUpArrowFunctionKey: Int" ": String(或Character …

appkit swift

11
推荐指数
3
解决办法
9476
查看次数

调整窗口大小以查看故事板中的控制器大小

我正在OSX 10.10上开发Xcode 6.1.1.我正在为Mac应用程序试用故事板.我有一个使用new的NSTabViewController NSTabViewControllerTabStyleToolbar tabStyle,它被设置为窗口控制器的默认视图控制器.如何根据当前选定的视图控制器调整窗口大小?

是否可以完全在Interface Builder中完成?这是我的故事板的样子: 故事板

macos cocoa storyboard appkit

11
推荐指数
2
解决办法
7654
查看次数

NSTextField上的奇怪滚动

我有一个NSTextField我尝试在它的内容发生变化时根据某个标准自动调整大小.

有时,当开始输入内容时,开始向上(或向下)移动文本字段的可见部分,如下面的gif所示:

GIF

如果我在里面点击NSTextField,内容会再次出现在正确的位置.

发射了XCode中的可视化调试器,我看到的是,当这种情况发生,私人子视图NSTextField:_NSKeyboardFocusClipView拥有frame它的Y坐标有一个负数.

我不确定是什么原因引起的.

这是我的textField调整大小行为:

import Cocoa

struct TextFieldResizingBehavior {
  let maxHeight: CGFloat = 100000.0
  let maxWidthPadding: CGFloat = 10
  let minWidth: CGFloat = 50
  let maxWidth: CGFloat = 250

  func resize(_ textField: NSTextField) {
    let originalFrame = textField.frame

    var textMaxWidth = textField.attributedStringValue.size().width
    textMaxWidth = textMaxWidth > maxWidth ? maxWidth : textMaxWidth
    textMaxWidth += maxWidthPadding

    var constraintBounds: NSRect = textField.frame
    constraintBounds.size.width = textMaxWidth
    constraintBounds.size.height = maxHeight

    var …
Run Code Online (Sandbox Code Playgroud)

cocoa nstextfield appkit swift

11
推荐指数
1
解决办法
240
查看次数

如何使用 Swift 和 AppKit(MacOS 的 Xcode)获取 IOBluetoothDevice 的电池电量

我正在使用Xcode开发基于CocoaAppKit、用Swift编写的MacOS 应用程序

我在整个应用程序中使用IOBluetoothDevice对象,并且我希望能够显示设备的电池电量(如果可以访问)。

我希望在操作系统的蓝牙设置中可以看到电池电量的设备(见下图),也可以通过编程方式访问(例如,AirPods、Magic Keyboard 等)。但是,我在任何地方都找不到。

我也想过执行终端命令并找到这个线程,但它也不起作用。

谢谢

操作系统可用的蓝牙设备电池电量

macos cocoa appkit swift

11
推荐指数
1
解决办法
988
查看次数

仅在 NSStatusBarButton 右键单击​​上显示 NSMenu?

我有以下代码:(可以复制粘贴到新的 macOS 项目)

import Cocoa
import SwiftUI

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
    var statusBarItem: NSStatusItem!

    func applicationDidFinishLaunching(_ aNotification: Notification) {

        let statusBar = NSStatusBar.system
        statusBarItem = statusBar.statusItem(
            withLength: NSStatusItem.squareLength)
        statusBarItem.button?.title = ""

        // Setting action
        statusBarItem.button?.action = #selector(self.statusBarButtonClicked(sender:))
        statusBarItem.button?.sendAction(on: [.leftMouseUp])

        let statusBarMenu = NSMenu(title: "Status Bar Menu")
        statusBarMenu.addItem(
            withTitle: "Order an apple",
            action: #selector(AppDelegate.orderAnApple),
            keyEquivalent: "")

        statusBarMenu.addItem(
            withTitle: "Cancel apple order",
            action: #selector(AppDelegate.cancelAppleOrder),
            keyEquivalent: "")

        // Setting menu
        statusBarItem.menu = statusBarMenu
    }

    @objc func statusBarButtonClicked(sender: NSStatusBarButton) {
        let event …
Run Code Online (Sandbox Code Playgroud)

macos cocoa appkit swift swiftui

11
推荐指数
2
解决办法
2196
查看次数