小编Ben*_*ock的帖子

在Objective-C(OS X)中,Quartz Display Services使用的"全局显示"坐标空间与Cocoa的"屏幕"坐标空间相同吗?

我正在尝试为我的应用程序创建一个图像"放大镜",可以用来检查不同放大倍数的图像,我遇到了一些路障.我正在使用Quartz创建CGImageRef我的应用程序窗口所在的显示的选定部分的快照.问题是,所有不同OS X技术使用的命名法让我非常困惑.

我正在使用的功能是CGDisplayCreateImageForRect(CGDirectDisplayID display, CGRect rect).文档说明CGRect rect参数是"在显示空间中指定的矩形,用于复制到图像中的显示部分".问题是,我在控制台中获得的输出并不是我所期望的.我已经尝试了很多不同的转换,转换,协调翻转等等,我现在已经100%困惑了.

所以,我想我的问题归结为:屏幕空间==设备空间==显示空间,以及如何正确转换他或她的视图框架(恰好是自定义无边框窗口)坐标(左下角) )匹配显示器的坐标(左上角原点)?

如果有人能指引我,或指出我正确的方向,我会永远感激.谢谢!

macos cocoa objective-c quartz-graphics coordinates

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

用于目标Interface Builder的预处理器宏不适用于OS X?

我有一个IB_DESIGNABLE自定义NSView子类.绘图时,我希望我的视图只有在Interface Builder中运行时才能执行方法.我查了一下,Apple的文档说明:

您可以使用预处理器宏TARGET_INTERFACE_BUILDER指定包含在自定义视图类中或从其中排除的代码.

- (void)connectToMyServer {
#if !TARGET_INTERFACE_BUILDER
    // connect to the server
#else
    // don't connect; instead, draw my custom view
#endif 
}
Run Code Online (Sandbox Code Playgroud)

我跳到我的代码,并将以下内容添加到我的一个方法中:

#if TARGET_INTERFACE_BUILDER
[self myMethodForInterfaceBuilder];
#endif
Run Code Online (Sandbox Code Playgroud)

马上,我收到以下错误:

.../MyCustomView.m:134:8:使用未声明的标识符'TARGET_INTERFACE_BUILDER'

这让我相信TARGET_INTERFACE_BUILDER预处理器宏仅适用于使用iOS SDK的Xcode目标.我在这个假设中是正确的,还是我忽略了什么?任何建议都会很棒!谢谢.

macos macros objective-c interface-builder ios

9
推荐指数
1
解决办法
2159
查看次数

NSWindow与NSWindowTitleVisibilityNone将错误的帧保存到用户默认值?

我的应用程序有一个选项,允许用户在标准的"全尺寸"窗口标题栏/工具栏和NSWindow10.10 API中提供的"紧凑"标题栏/工具栏之间进行选择.具体来说,我正在使用该-titleVisibility方法来设置NSWindowTitleVisibleNSWindowTitleHidden取决于用户的偏好.如果用户选中"Compact Titlebar"复选框,NSWindowTitleHidden则应用于窗口,否则,窗口将使用默认样式.当复选框值更改时,该值将存储在应用程序的用户默认值中,并且窗口将更新/重新绘制.

在重新启动应用程序之前,一切都很顺利.每次应用程序启动时,窗口都会通过从默认窗口样式(NSWindowTitleVisible)切换到新样式(NSWindowTitleHidden)来确切节省多少空间.因此,重新启动应用程序5-6次将使窗口与菜单栏和扩展坞齐平,具体取决于最初检查复选框时窗口的大小.

换句话说,在NSUserDefaults设置属性时,似乎不会更新窗口的框架.有没有解决方法,或者我只是忽略了什么?任何建议都会有用.

谢谢!

objective-c frame nsuserdefaults nswindow osx-yosemite

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

Objective-C:正确处理子类 NSControl 和 NSActionCell 之间的共享属性?

我一直不确定的事情之一是如何正确处理自定义NSControl子类和NSCell子类之间的通信。在我对 Cocoa 的介绍中,我多次看到它提到父控件如何提供许多与子单元格/单元格实现相同的方法、访问器和修改器。例如,NSControl类和NSCell类都有-isEnabled-setEnabled:类的头文件中

\n\n

NSControl.h

\n\n
- (BOOL)isEnabled;\n- (void)setEnabled:(BOOL)flag;\n
Run Code Online (Sandbox Code Playgroud)\n\n

NSCell.h

\n\n
- (BOOL)isEnabled;\n- (void)setEnabled:(BOOL)flag;\n
Run Code Online (Sandbox Code Playgroud)\n\n

据我所知,该类NSControl为. 我更感兴趣的是:它们是如何实现的?或者更好的是,应该如何实现他/她自己的子类的共享属性?显然,只有苹果的工程师真正知道他们的框架内部发生了什么,但我想也许有人可以阐明以一种干净的方式模仿苹果的封面方法的最佳方法。NSCell

\n\n

我不擅长解释东西,所以我将提供一个例子来说明我正在谈论的内容。假设我已经NSControl像这样子类化了:

\n\n

BSDToggleSwitch.h

\n\n
#import "BSDToggleSwitchCell.h"\n\n@interface BSDToggleSwitch : NSControl\n\n@property (nonatomic, strong) BSDToggleSwitchCell *cell;\n@property (nonatomic, assign) BOOL sharedProp;\n\n@end\n
Run Code Online (Sandbox Code Playgroud)\n\n

我已经子类化了NSActionCell

\n\n

BSDToggleSwitchCell.h

\n\n
#import "BSDToggleSwitch.h"\n\n@interface BSDToggleSwitchCell : NSActionCell\n\n@property (nonatomic, weak) BSDToggleSwitch *controlView;\n@property (nonatomic, assign) BOOL sharedProp;\n\n@end\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如您所看到的,它们都共享一个名为 的属性sharedProp …

macos cocoa objective-c nscell nscontrol

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

完全重新安装Laravel 5迁移的东西?

长话短说,我完全搞砸了我在本地机器上的Laravel迁移.它们100%无法使用.

我是第一次和Laravel 5合作,所以我只是在弄乱东西并测试水域,可以这么说.在手动修改数据库,重写我的迁移,意外删除一两个表(然后是'迁移'表本身[doh!])之间,我处于混合状态,我只是想开始所有的从头开始迁移东西.但是,我似乎无法弄清楚如何做到这一点.

我目前陷入了无法做任何事情的状态.

例如,如果执行时遗留的旧表仍在数据库中,则会php artisan migrate:refresh收到Base table or view already exists错误消息.但是,如果我删除所有表,我会收到此错误:

Next exception 'Illuminate\Database\QueryException' with message
'SQLSTATE[42S02]: Base table or view not found: 1146 Table
'bsd_status.projects' doesn't exist (SQL: select * from `projects`)' in 
path/to/src/Illuminate/Database/Connection.php:620
Run Code Online (Sandbox Code Playgroud)

我运行以下命令:

$ php artisan clear-compiled
$ php artisan cache:clear
$ php composer dump-autoload
$ php artisan migrate:install
Run Code Online (Sandbox Code Playgroud)

我甚至不确定我是按照正确的顺序做这些事情的.无论如何,除了完全重新安装Laravel之外,如何将他/她的所有迁移恢复到"开箱即用"?任何帮助将不胜感激.谢谢!

php mysql database-migration laravel artisan

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

为什么这个NSInvocation会引发异常?

我现在真的很头疼.因此,一个NSTimer对象,一个NSMethodSignature对象和一个NSInvocation对象走进一个吧.这是其余的笑话:

NSMethodSignature *methodSig = [NSMethodSignature methodSignatureForSelector:@selector(setAlphaValue:)];
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:methodSig];
CGFloat alphaVal = 1.f;

[inv setSelector:@selector(setAlphaValue:)];
[inv setTarget:tabViewItem.view];
[inv setArgument:&alphaVal atIndex:2];

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.5f invocation:inv repeats:NO];
Run Code Online (Sandbox Code Playgroud)

这是我在调试控制台中获得的内容:

+[NSInvocation _invocationWithMethodSignature:frame:]: method signature argument cannot be nil

编辑:我不确定为什么有人认为有必要对我的问题进行投票.很抱歉试图学习新东西.实际上,这是对我原来问题的修正:我应该采取哪些不同的做法?一旦我弄清楚我的问题是什么,我应该刚刚删除了帖子吗?我试图遵循所有的Stack Overflow礼仪,我甚至花时间给出一个可以帮助别人的机会.下一次,我应该回到我的问题并留下一个回应,比如"nvm ......想通了.你好吗?" 或者我应该把它留在这里,没有答案?我肯定知道我已经厌倦了点击链接只能导致无人接听的帖子.

exception objective-c method-signature nstimer nsinvocation

3
推荐指数
1
解决办法
1424
查看次数

NSView,NSViewController和MainMenu.xib究竟是如何组合在一起的?

我要切入追逐:我的应用程序已经增长了很多,现在我觉得是时候做一些整理了.我想将我的一些视图从我的MainMenu.xib文件中分离到他们自己的Nib文件中.绊倒我的部分是整个"Interface Builder + My Code"的事情.这是我到目前为止所做的:

  1. 我添加了一个视图控制器代理对象:
    在Interface Builder对象浏览器中查看Controller对象

  2. Identity检查器中,我已将视图控制器的类名添加到Custom Class字段中.
    Interface Builder中的Identity Inspector

  3. 在" 属性"检查器中,我输入了要加载的笔尖的名称. Interface Builder中的Nib Name字段

  4. 我已将视图控制器对象的视图插座连接到MainMenu.xib中的现有视图.
    在Interface Builder中查看View Controller上的Outlet

  5. 最后,我点击Cmd + R,我的观点不存在.
    [在这里插入FFFFUUUUU meme的图像.]

我错过了什么?过去两周我一直盯着我的Mac日复一日,所以如果我完全遗漏了一些东西,我也不会感到惊讶.如果有人看到我的n00b方式,并愿意指出我正确的方向,我会非常感激.谢谢.

cocoa interface-builder nsview nib nsviewcontroller

2
推荐指数
1
解决办法
3561
查看次数

关于小牛的Xcode 5.0.1:我如何摆脱这个警告?

我有一段代码,使用图像的alpha通道创建一个蒙版.在升级到Mavericks之前,它运行良好,我从未在Xcode调试控制台中收到任何警告或错误.自升级以来,我收到此警告:

从枚举类型'enum CGImageAlphaInfo'到不同的枚举类型'CGBitmapInfo'(又名'enum CGBitmapInfo')的隐式转换

标记为问题的行:

CGBitmapContextCreate(alphaData, width, height, 8, rowBytes, NULL, kCGImageAlphaOnly);
Run Code Online (Sandbox Code Playgroud)

这是文档为最后一个参数(aka kCGImageAlphaOnly)所说的内容:

bitmapInfo

指定位图是否应包含Alpha通道,Alpha通道在像素中的相对位置以及有关像素组件是浮点值还是整数值的信息的常量.用于指定alpha通道信息的常量是使用CGImageAlphaInfo类型声明的,但可以安全地传递给此参数.您还可以传递与该CGBitmapInfo类型关联的其他常量.

奇怪的是,在文档(图像的Alpha信息)中,Apple的typedef没有列出我正在使用的选项.但是,在随后的术语列表中,确实如此!这就是它所说的:

kCGImageAlphaOnly
没有颜色数据,只有alpha通道.适用于OS X v10.3及更高版本.宣布于CGImage.h.

考虑到我想创建一个alpha蒙版,我对任何颜色数据都不感兴趣,所以我使用的参数是唯一有意义的.我不确定它要我做什么.无论如何,该方法有效,并且当应用程序运行时一切都很好.话虽如此,警告真的很烦人.是否有一个特殊的CLANG指令让它沉默?任何帮助,将不胜感激.干杯.

xcode enums warnings objective-c

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

Swift 3通用扩展参数

在Swift 2.x中,我有一个很好的小设置,允许我使用枚举成员存储和检索字典值:

public enum UserDefaultsKey : String {
    case mainWindowFrame
    case selectedTabIndex
    case recentSearches
}

extension Dictionary where Key : String {
    public subscript(key: UserDefaultsKey) -> Value? {
        get { return self[key.rawValue] }
        set { self[key.rawValue] = newValue }
    }
}
Run Code Online (Sandbox Code Playgroud)

这允许我访问这样的值:

let dict = userDefaults.dictionaryForKey("SearchPrefs")
if let recentSearches = dict?[.recentSearches] as? [String] {
    // Populate "Recent" menu items
}
Run Code Online (Sandbox Code Playgroud)

...而不是必须访问这样的值:

let dict = userDefaults.dictionaryForKey("SearchPrefs")
if let recentSearches = dict?[UserDefaultsKey.recentSearches.rawValue] as? [String] {
    // Populate "Recent" menu items
}
Run Code Online (Sandbox Code Playgroud)

注意: …

generics dictionary swift swift-extensions swift3

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