如何为 CNMutableContact 的 `thumbnailImageData` 设置裁剪信息
How to set crop information for `thumbnailImageData` of CNMutableContact
我 create/update 联系人,使用 CNMutableContact
。
我可以通过 imageData
属性 设置新图像,但我需要设置自定义裁剪信息以创建缩略图。 属性 thumbnailImageData
是只读的。
代码:
let cnContact = CNMutableContact()
cnContact.imageData = imageData //created before
如何添加自定义缩略图裁剪?
在iOS中似乎无法设置缩略图。但是,根据定义,图像的缩略图是裁剪到较小尺寸的同一图像。因此 iOS 将在保存联系人时自动从联系人上设置的图像数据生成缩略图。
如果您想为缩略图和实际联系人图像设置不同的图像,iOS 不允许您这样做。
我遇到的问题:
在用户的联系人中添加新联系人(CNMutableContact
参考)之前,我想向用户显示联系人。我可以使用 imageData
来设置新联系人的图像。但是,当使用 CNContactViewController
显示此新联系人时,图像不会按照缩略图进行裁剪。显示的缩略图看起来非常奇怪并且缩放。如何解决?
解法:
这是因为 CNMutableContact
对象上的 thumbnailImageData
属性 为 nil。这个 属性 不能由开发者设置。此 属性 只能由 iOS 内部设置,并且在保存联系人时由 iOS 自动生成。
因此,在显示 CNMutableContact
对象之前,您应该将其保存到用户联系人中,以启动自动缩略图生成,然后立即删除联系人。
CNMutableContact 上的以下扩展描述了您可以做些什么来实现这一目标。
extension CNMutableContact {
func generateThumbnailImage() {
if self.thumbnailImageData != nil {
return
}
// contact.thumbnailImageData is nil
// First save the contact for the thumbnail to be generated
let saveRequest = CNSaveRequest()
saveRequest.add(self, toContainerWithIdentifier: nil)
do {
try CNContactStore().execute(saveRequest)
} catch let error {
print("Error occurred while saving the request \(error)")
}
// self.thumbnailImageData is not nil. Contact Store will generate the thumbnail for this contact with the imageData provided.
// Now delete the contact
let deleteRequest = CNSaveRequest()
deleteRequest.delete(self)
do {
try CNContactStore().execute(deleteRequest)
} catch let error {
print("Error occurred while deleting the request \(error)")
}
// The contact is removed from the Contact Store
// However, the contact.thumbnailImageData is not nil anymore. Contacts Store has generated the thumbnail automatically with the imageData provided.
}
}
我 create/update 联系人,使用 CNMutableContact
。
我可以通过 imageData
属性 设置新图像,但我需要设置自定义裁剪信息以创建缩略图。 属性 thumbnailImageData
是只读的。
代码:
let cnContact = CNMutableContact()
cnContact.imageData = imageData //created before
如何添加自定义缩略图裁剪?
在iOS中似乎无法设置缩略图。但是,根据定义,图像的缩略图是裁剪到较小尺寸的同一图像。因此 iOS 将在保存联系人时自动从联系人上设置的图像数据生成缩略图。
如果您想为缩略图和实际联系人图像设置不同的图像,iOS 不允许您这样做。
我遇到的问题:
在用户的联系人中添加新联系人(CNMutableContact
参考)之前,我想向用户显示联系人。我可以使用 imageData
来设置新联系人的图像。但是,当使用 CNContactViewController
显示此新联系人时,图像不会按照缩略图进行裁剪。显示的缩略图看起来非常奇怪并且缩放。如何解决?
解法:
这是因为 CNMutableContact
对象上的 thumbnailImageData
属性 为 nil。这个 属性 不能由开发者设置。此 属性 只能由 iOS 内部设置,并且在保存联系人时由 iOS 自动生成。
因此,在显示 CNMutableContact
对象之前,您应该将其保存到用户联系人中,以启动自动缩略图生成,然后立即删除联系人。
CNMutableContact 上的以下扩展描述了您可以做些什么来实现这一目标。
extension CNMutableContact {
func generateThumbnailImage() {
if self.thumbnailImageData != nil {
return
}
// contact.thumbnailImageData is nil
// First save the contact for the thumbnail to be generated
let saveRequest = CNSaveRequest()
saveRequest.add(self, toContainerWithIdentifier: nil)
do {
try CNContactStore().execute(saveRequest)
} catch let error {
print("Error occurred while saving the request \(error)")
}
// self.thumbnailImageData is not nil. Contact Store will generate the thumbnail for this contact with the imageData provided.
// Now delete the contact
let deleteRequest = CNSaveRequest()
deleteRequest.delete(self)
do {
try CNContactStore().execute(deleteRequest)
} catch let error {
print("Error occurred while deleting the request \(error)")
}
// The contact is removed from the Contact Store
// However, the contact.thumbnailImageData is not nil anymore. Contacts Store has generated the thumbnail automatically with the imageData provided.
}
}