小编Pie*_*ard的帖子

着色灰度NSImage(或CIImage)

我有一个灰度图像,我想用它来绘制Cocoa控件.图像具有不同级别的灰度.在最黑暗的地方,我希望它能画出最暗的指定色调.我希望它在源图像为白色时是透明的.

基本上,我想重现iPhone上UINavigationBar中看到的tintColor的行为.

到目前为止,我已经探索了几个选项:

  • 使用SourceOver合成在灰度图像上绘制色调颜色 - >这需要非不透明的色调 - >结果比期望的要暗得多

  • 使用CIMultiplyCompositing CIFilter为图像着色 - >我不能[CIImage drawAtPoint:fromRect:operation:fraction:]只绘制部分图像.同样适用于NSImage - >我偶尔会碰到一些我无法理解的崩溃

  • 将灰度图像转换为蒙版.即黑色应该是不透明的.白色应该是透明的.灰色应具有中间alpha值. - >这似乎是最好的解决方案 - >尽我所能,我无法做到这一点.

cocoa objective-c core-image

28
推荐指数
4
解决办法
1万
查看次数

使用Cocoa和Core Data自动保存

我正在开发一个非基于文档的Core Data应用程序.

我希望在发生变化时保存更改.这是用户在此类应用程序中所期望的.这也是Apple在iPhotoiTunes中实现的.

蛮力方法是设置一个频繁保存的计时器.然后,由保存触发的方法将吞下所有验证错误,以免打扰用户.只有在退出时,用户才会被安排数据以便保存.恕我直言,那种方法很臭.

所以我在想,必须有办法以某种方式将保存挂钩到类似NSEditor协议之类的东西.每次用户(或控制器)完成编辑数据时,应以某种方式通知应用程序委托触发保存操作.事情是我不知道在哪里看.

我认为对于更复杂的操作,可能需要进行一些交叉验证,我会向用户提供与专用相关的接口位NSManagedObjectContext.

cocoa core-data

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

如何将文件夹标记为包?

我曾经认为文件夹需要有一个扩展名,以便Finder将它们识别为包.该扩展将在拥有应用程序的Info.plist中声明.

显然还有另一种更优雅的方式,但我无法弄清楚它是如何完成的.

例如,Finder将iPhoto图库视为包.但它没有延伸.mdls显示它确实在内容类型树中有"com.apple.package".实际内容类型是动态分配的.

iPhoto如何创建这样的目录?

cocoa

6
推荐指数
1
解决办法
1247
查看次数

NSRuleEditor:新行的标准

当我按下NSRuleEditor中某行的"+"按钮时,会创建一个新行.如何影响该行使用的标准.

似乎NSRuleEditor默认从可能值列表中顺序选择第一个标准.我宁愿让新行匹配单击"+"的行.

cocoa

5
推荐指数
1
解决办法
823
查看次数

从锁定的 SQLite3 数据库读取

我正在查看第三方进程拥有的 SQLite 数据库。它看起来是锁定的并且有一个 *-journal 文件。我不知道的是,锁是共享的还是独占的。

我希望从数据库中读取,即使它当前被其他进程锁定。我只会从数据库中读取。

目前我失败了。只要第三方进程正在运行,我就会收到 SQLITE_BUSY 返回码。

我看过 sqlite3_busy_handler,但这似乎不是解决方案。据我了解,只允许实现重试机制。它似乎没有提供一种方法来忽略数据库已锁定的事实。

如何强制 SQLite 从该数据库中读取数据?

顺便说一句,我目前正在使用 FMDatabase API 包装器。这不使用 sqlite3_busy_handler。只要得到 SQLITE_BUSY 返回码,它就会无限循环。

c sqlite objective-c

5
推荐指数
1
解决办法
1806
查看次数

NSTextFinder + 以编程方式更改 NSTextView 中的文本

我有一个 NSTextView,我想使用查找栏。文本可以选择,但不可编辑。我以编程方式更改文本视图中的文本。

当 NSTextFinder 在文本更改后尝试选择下一个匹配项时,此设置可能会崩溃。NSTextFinder 似乎保留了增量匹配的过时范围。

我尝试了几种更改文本的方法:

[textView setString:@""];
Run Code Online (Sandbox Code Playgroud)

或者

NSTextStorage *newStorage = [[NSTextStorage alloc] initWithString:@""];

[textView.layoutManager replaceTextStorage:newStorage];
Run Code Online (Sandbox Code Playgroud)

或者

[textView.textStorage beginEditing];
[textView.textStorage setAttributedString:[[NSAttributedString alloc] initWithString:@""]];
[textView.textStorage endEditing];
Run Code Online (Sandbox Code Playgroud)

仅replaceTextStorage:调用-[NSTextFinder noteClientStringWillChange]。以上都不会调用 -[NSTextFinder cancelFindIndicator]。

即使 NSTextFinder 通知了文本更改,它也可能在查找下一个(命令-G)时崩溃。

我还尝试按照这篇文章中的建议创建自己的 NSTextFinder 实例。即使 NSTextView 没有实现 NSTextFinderClient 协议,它也能正常工作并失败,就像没有 NSTextFinder 实例一样。

将 NSTextFinder 与 NSTextView 一起使用的正确方法是什么?

cocoa nstextview

5
推荐指数
1
解决办法
1591
查看次数

通过UUID查找卷

我知道卷的UUID - 如"磁盘工具"中所示.

如何获得有关卷的其他信息?最重要的是,我想知道它的挂载点.

查看/ etc/fstab并不能解决问题.这不会列出根卷.我至少需要弄清楚根卷的UUID来验证我已知的UUID.

macos cocoa macos-carbon

4
推荐指数
1
解决办法
9362
查看次数