2009-10-06 10 views
6

Estoy tratando de agregar un borde alrededor de cada foto de contacto. código que he trabajando para crear esta imagen confinada y el código de trabajo para establecer que la imagen de contacto como:ABPersonSetImageData solo alterando la miniatura del contacto y no la imagen completa

if (image) { 
    NSData *dataRef = UIImagePNGRepresentation(image); 
    CFDataRef cfdata = CFDataCreate(NULL, [dataRef bytes], [dataRef length]); 
    CFErrorRef error; 
    ret = ABPersonSetImageData(person, cfdata, &error); 
    if (ret) { 
     ret = ABAddressBookSave(addressBook, &error); 
    } else { 
     DebugLog(@"Could not write the image to the person: %@", [error description]); 
    } 
    CFRelease(cfdata); 
} 

El problema que veo es que si bien la imagen confinada se muestra correctamente en la miniatura cuando se ve en los contactos o Aplicación de teléfono, la imagen de pantalla completa que se muestra en una llamada entrante no lo es.

Originalmente pensé que se ampliaba un poco, así que experimenté con el tamaño del borde. Confirmé que el borde no se muestra en absoluto en el plano grande. ¿Me estoy perdiendo algo obvio?


EDITAR 10/9/09 He estado en comunicación con Apple y esto es de hecho un error en el marco de la Agenda. Si está leyendo esta publicación, le sugiero que llame al file a bug with Apple para ayudar a acelerar la solución.

Respuesta

7

Voy a responder mi propia pregunta aquí, ya que creo que descubrí cuál es el problema. Si su contacto NO tiene una imagen, tanto la miniatura como el tamaño completo se agregarán cuando use ABPersonSetImageData. Si su contacto ya tiene una imagen de tamaño completo, SÓLO la miniatura se establecerá cuando use ABPersonSetImageData.

Después de realizar esto, la solución es obvia. Solo eliminé la imagen justo antes de configurarla.

if (image) { 
    NSData *dataRef = UIImagePNGRepresentation(image); 
    CFDataRef cfdata = CFDataCreate(NULL, [dataRef bytes], [dataRef length]); 
    CFErrorRef error; 

    ABPersonRemoveImageData(person, &error); // <-- clean any image first from ref 
    ABAddressBookSave(addressBook, &error); 

    ret = ABPersonSetImageData(person, cfdata, &error); 
    if (ret) { 
     ret = ABAddressBookSave(addressBook, &error); 
    } else { 
     DebugLog(@"Could not write the image to the person"); 
    } 
    CFRelease(cfdata); 
} 

NOTA * Esto crea una versión cuadrada de la imagen de tamaño completo. El proceso recorta la parte superior e inferior de la imagen y la establece en 320x320. Pero, está funcionando.

EDIT 10/9/09 He estado en comunicación con Apple y esto es de hecho un error en el marco de la libreta de direcciones. Si está leyendo esta publicación, le sugiero que llame al file a bug with Apple para ayudar a acelerar la solución.

+0

Seguí esto y pude reemplazar la imagen, pero todavía muestra la imagen en miniatura cuando llega una llamada ... Intenté borrar la imagen manualmente y reemplazarla por el código. Pero no sirve. Me pregunto si esto funciona? gracias –

Cuestiones relacionadas