我正在制作一个Cocoa应用程序,我无法弄清楚如何做某事.
我想制作一个NSTextField,其外观与Wallet中的一样:
我想出了如何更改NSTextField大小,但我不知道如何更改字体和大小.我将NSTextFieldCell子类化为这样但它不起作用,如果我不选择系统字体并且大小只改变行高而不是字符高度,则字体不会改变.
头文件:
#import <Cocoa/Cocoa.h>
@interface VLTextFieldCell : NSTextFieldCell {
}
@end
Run Code Online (Sandbox Code Playgroud)
班级档案:
#import "VLTextFieldCell.h"
@implementation VLTextFieldCell
- (NSFont *)font
{
return [NSFont fontWithName:@"Lucida Grande" size:16.0];
}
@end
Run Code Online (Sandbox Code Playgroud) 我做了一个自定义NSControl,将其用作自定义图层备份按钮.
当MyButton实例收到mouseDown并mouseUp发生事件时,它会改变它backgroundLayer的backgroundColor和它textLayer的foregroundColor.
它使用图层,因此隐式动画更改.
但是mouseUp如果鼠标在MyButton实例框架内,我通过sendAction(_:to:)方法调用链接动作.
我将操作链接到关闭当前窗口并打开另一个窗口的方法,但有时在第二个窗口出现后应用程序冻结.
我尝试了几件事情,它似乎与图层动画有关,也许在关闭窗口之前要做的事我不知道.
更新:这是Tweetbot!如果Tweetbot正在运行它会冻结应用程序!一旦我退出它,应用程序就会再次响应.
您可以在这里找到一个示例项目:https
:
//dl.dropboxusercontent.com/u/378166/CALayerFreeze.zip
(请注意,在发生错误之前,您有时需要多次尝试)
这是代码MyButton.
class MyButton: NSControl {
let title = "Click me!"
// Init
required init?(coder: NSCoder) {
super.init(coder: coder)
setup()
}
deinit {
trackingAreas.forEach { self.removeTrackingArea($0) }
}
// Layer + Tracking Area configuration
var backgroundLayer = CALayer()
var textLayer = CATextLayer()
func setup() { …Run Code Online (Sandbox Code Playgroud) 我正在制作一个可以在事件中播放声音的应用程序,但我无法弄清楚如何从应用程序的ressources文件夹中访问文件.
这是我正在做的事情:
NSSound *player = [[NSSound alloc] initWithContentsOfFile:@"Sound.mp3"] byReference:NO];
[player play];
Run Code Online (Sandbox Code Playgroud)
但它根本不起作用.如果我放一个完整长度的路径它会工作,但我需要另一种方式,因为有人可能会将我的应用程序放在Application文件夹以外的其他位置.
这怎么可能创建Array的UInt8斯威夫特?我用以下代码尝试了这个:
var array: [UInt8] = [UInt8]()
Run Code Online (Sandbox Code Playgroud)
现在我想循环第二个UInt变量a:
for var i: Int = 0; i < a.count; i++ {
array[i] = UInt8(a[i]^b[i])
}
Run Code Online (Sandbox Code Playgroud)
但后来我收到以下错误:
致命错误:数组索引超出范围
当我在变量中放入相同的位a- >时[0x01,0x01,0x01,0x01,0x01],array循环工作正常!
有人知道为什么吗?