如何创建包装 UIOffset 结构的 NSValue?
Posted
技术标签:
【中文标题】如何创建包装 UIOffset 结构的 NSValue?【英文标题】:How do you create an NSValue wrapping a UIOffset struct? 【发布时间】:2012-03-30 21:29:25 【问题描述】:我正在尝试更改 UISegmentedControl 的文本阴影位置。为此,documentation 说我需要传入一个包装 UIOffset 结构的NSValue。
UITextAttributeTextShadowOffset
Key to the offset used for the text shadow in a text attributes dictionary.
The corresponding value is an instance of NSValue wrapping a UIOffset struct.
Available in ios 5.0 and later.
Declared in UIStringDrawing.h.
问题是NSValue 没有这样的 UIOffset 结构的包装方法 - 只需搜索文档即可。我看到很多sample code 使用这个不存在的功能。
[NSValue valueWithUIOffset:UIOffsetMake(0, 1)]
当我尝试运行它时它崩溃了。我不明白有多少示例代码可以运行它。
【问题讨论】:
【参考方案1】:查看NSValue UIKit Additions,这是一个类别,除了其他有用的东西之外,它还添加了您所追求的-[NSValue valueWithUIOffset:]
方法。
【讨论】:
【参考方案2】:它可能不在文档中,但它存在并且有效:
NSValue *uiOffsetValue = [NSValue valueWithUIOffset:UIOffsetMake(0, 1)];
NSLog(@"%@", uiOffsetValue);
// outputs "UIOffset: 0, 1"
你是什么意思,当你尝试运行它时它崩溃了?如果该方法不存在,那么它甚至不应该编译。如果您的应用程序编译但崩溃,则问题一定是其他原因。
【讨论】:
Xcode 只警告不要将未知消息传递给对象。当将未知消息传递给对象时,Objective-C 将在运行时崩溃。 真的吗?我有一个 vanilla Xcode 设置,如果我尝试使用未知方法,我会得到“选择器 'foo:' 的无已知类方法”,它甚至无法编译。 其实经过进一步测试。它只在我的 iOS 4 设备上崩溃。它适用于我的 iOS 5 设备。这是可以理解的,因为设置阴影位置仅在 5 上支持。但是关于为什么 valueWithUIOffset 不在文档中仍然是一个未解之谜。 它在文档中 - 请参见此处:developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/… 它还显示“在 iOS 5.0 及更高版本中可用”,这解释了它为什么会在您的 iOS 4 设备上崩溃。以上是关于如何创建包装 UIOffset 结构的 NSValue?的主要内容,如果未能解决你的问题,请参考以下文章