Para añadir a la otra, enlace -solo respuestas, aquí es cómo se hace esto.
- Crear una nueva subclase de UIPopoverBackgroundView
declaramos lo siguiente en su interfaz:
+(UIEdgeInsets)contentViewInsets;
+(CGFloat)arrowHeight;
+(CGFloat)arrowBase;
@property(nonatomic,readwrite) CGFloat arrowOffset;
@property(nonatomic,readwrite) UIPopoverArrowDirection arrowDirection;
métodos de la clase son sencillos: contentViewInsets
devuelve el ancho de sus fronteras en todo el perímetro (no incluyendo la flecha), arrowHeight
es la altura de su flecha, arrowBase
es la base de su flecha.
- Implementa los dos arregladores de propiedades, asegurándose de llamar al
[self setNeedsLayout]
.
- En su método de inicialización, cree dos vistas de imágenes, una sosteniendo su flecha (que debe ser del tamaño de las dimensiones de la flecha en sus métodos de clase) y otra sosteniendo su imagen de fondo (que debe ser una imagen redimensionable) y añádalas como subvistas. No importa dónde coloque las subvistas en este punto, ya que no tiene una dirección o desplazamiento de flecha. Debe asegurarse de que la vista de la imagen de la flecha esté sobre la vista de la imagen de fondo para que se integre correctamente.
- Implemento
layoutSubviews
. Aquí, de acuerdo con las propiedades arrowDirection
y arrowOffset
, debe ajustar los marcos de la vista de fondo y de la flecha.
- El marco de la vista de fondo debe ser
self.bounds
, inserción por arrowHeight
en cualquier borde de la flecha está en
- El marco de la vista flecha debe estar alineado de manera que el centro es
arrowOffset
de distancia del centro de self
(correcta según el eje). Tienes que cambiar la orientación de la imagen si la dirección de la flecha no está arriba, pero mi popover solo estaría arriba, así que no hice eso.
Aquí es el método layoutSubviews
para mi hasta sólo subclase:
-(void)layoutSubviews
{
if (self.arrowDirection == UIPopoverArrowDirectionUp)
{
CGFloat height = [[self class] arrowHeight];
CGFloat base = [[self class] arrowBase];
self.background.frame = CGRectMake(0, height, self.frame.size.width, self.frame.size.height - height);
self.arrow.frame = CGRectMake(self.frame.size.width * 0.5 + self.arrowOffset - base * 0.5, 1.0, base, height);
[self bringSubviewToFront:self.arrow];
}
}
¿Estás seguro de que no has podido encontrar la documentación ?: http://developer.apple.com/library/IOs/#documentation/UIKit/Reference/UIPopoverBackgroundView_class/Reference/Reference.html – CodaFi
Tal vez buscando el SDK incorrecto ? –
Gracias por #import :) –
Cesar