Ios 如何在Swift 2.0中创建CTRunDelegate
我正在使用CoreText处理NSTextAttachment。CoreText需要CtrUnelegate来布局附件。但我在运行以下代码时出错Ios 如何在Swift 2.0中创建CTRunDelegate,ios,swift,core-text,Ios,Swift,Core Text,我正在使用CoreText处理NSTextAttachment。CoreText需要CtrUnelegate来布局附件。但我在运行以下代码时出错 class RunDelegate: NSObject { let image: UIImage let font: UIFont init(image: UIImage, font: UIFont) { self.image = image self.font = font } }
class RunDelegate: NSObject {
let image: UIImage
let font: UIFont
init(image: UIImage, font: UIFont) {
self.image = image
self.font = font
}
}
private func generateRunDelegate(attachment: NSTextAttachment, font: UIFont) -> CTRunDelegateRef {
var d = RunDelegate(image: attachment.image!, font: font)
var cbs = CTRunDelegateCallbacks(version: kCTRunDelegateCurrentVersion, dealloc: { (p) -> Void in
}, getAscent: { (p) -> CGFloat in
let d = UnsafeMutablePointer<RunDelegate>(p).memory
return d.image.size.height + d.font.descender // Error here, EXC_BAD_ACCESS(code = 1)
}, getDescent: { (p) -> CGFloat in
let d = UnsafeMutablePointer<RunDelegate>(p).memory
return -d.font.descender
}) { (p) -> CGFloat in
let d = UnsafeMutablePointer<RunDelegate>(p).memory
return d.image.size.width
}
return CTRunDelegateCreate(&cbs, &d)!
}
类RunDelegate:NSObject{
let image:UIImage
字体:UIFont
初始化(图像:UIImage,字体:UIFont){
self.image=image
self.font=font
}
}
专用func GeneratorUndelegate(附件:NSTextAttachment,字体:UIFont)->CTRunDelegateRef{
var d=RunDelegate(图像:attachment.image!,字体:font)
var cbs=CTRunDelegateCallbacks(版本:kCTRunDelegateCurrentVersion,dealloc:{(p)->Void in
},getAscent:{(p)->CGFloat-in
设d=unsafemeutablepointer(p).memory
返回d.image.size.height+d.font.downer//此处有错误,EXC\u访问错误(code=1)
},getDescent:{(p)->CGFloat-in
设d=unsafemeutablepointer(p).memory
返回-d.font.downer
}){(p)->CGFloat in
设d=unsafemeutablepointer(p).memory
返回d.image.size.width
}
返回CTRunDelegateCreate(&cbs,&d)!
}
有人能帮忙吗?谢谢 请尝试此代码
class RunDelegate: NSObject {
let image: UIImage
let font: UIFont
class func object(pointer: UnsafeMutablePointer<Void>) -> RunDelegate {
return Unmanaged<RunDelegate>.fromOpaque(COpaquePointer(pointer)).takeRetainedValue()
}
init(image: UIImage, font: UIFont) {
self.image = image
self.font = font
}
}
private func generateRunDelegate(attachment: NSTextAttachment, font: UIFont) -> CTRunDelegateRef {
var d = RunDelegate(image: attachment.image!, font: font)
var cbs = CTRunDelegateCallbacks(version: kCTRunDelegateCurrentVersion,
dealloc: { (p) -> Void in
}, getAscent: { (p) -> CGFloat in
let d = RunDelegate.object(pointer: p)
return d.image.size.height + d.font.descender
}, getDescent: { (p) -> CGFloat in
let d = RunDelegate.object(pointer: p)
return -d.font.descender
}) { (p) -> CGFloat in
let d = RunDelegate.object(pointer: p)
return d.image.size.width
}
return CTRunDelegateCreate(&cbs, d)!
}
类RunDelegate:NSObject{
let image:UIImage
字体:UIFont
类func对象(指针:UnsafeMutablePointer)->RunDelegate{
返回Unmanaged.from不透明(COpaquePointer)).takeRetainedValue()
}
初始化(图像:UIImage,字体:UIFont){
self.image=image
self.font=font
}
}
专用func GeneratorUndelegate(附件:NSTextAttachment,字体:UIFont)->CTRunDelegateRef{
var d=RunDelegate(图像:attachment.image!,字体:font)
var cbs=CTRunDelegateCallbacks(版本:kCTRunDelegateCurrentVersion,
dealloc:{(p)->Void in
},getAscent:{(p)->CGFloat-in
设d=RunDelegate.object(指针:p)
返回d.image.size.height+d.font.downer
},getDescent:{(p)->CGFloat-in
设d=RunDelegate.object(指针:p)
返回-d.font.downer
}){(p)->CGFloat in
设d=RunDelegate.object(指针:p)
返回d.image.size.width
}
返回CTRunDelegateCreate(&cbs,d)!
}
我认为它不是正确生成的。请为您的答案提供一些上下文和基本原理,而不是简单地发布代码。