ios - reproduce - no se puede conectar con apple tv
Problema con iOS 7.1: la imagen del icono de la barra de pestañas se ajusta automáticamente al tocar y arrastrar el botón de esa pestaña (12)
¡Pasé unas 3 horas! Y he encontrado nuestro error. No es bug de iOS.
Nota: imageInsets no ayudará! Porque esto es problema con la escala de la imagen. ¡Jugué 2 horas con eso! y ningún resultado. ¡Era una manera estúpida de intentar resolver el problema!
Mire este proyecto http://www.raywenderlich.com/50310/storyboards-tutorial-in-ios-7-part-2
En este proyecto los iconos de Jugadores y Gestos funcionan perfectamente! Porque hay iconos para retina y no retina.
Si tiene iconos para ambas escalas, entonces no hay problema. ¡usalos, usalos a ellos! ¡Todo funcionará bien! fue 1-variante!
2-variante. Si solo tiene una imagen grande y desea usarla en ambas pantallas, deberá especificar la "escala" de la imagen redimensionada:
(UIImage *)thumbnailImageSize:(CGSize)size fromImage:(UIImage *)image {
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 3.00) {
_scale = 3.00;
} else if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) {
_scale = 2.00;
} else
_scale = 1.00;
UIGraphicsBeginImageContextWithOptions(size, NO, _scale);
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
Tengo este codigo
[tabBarItem1 setFinishedSelectedImage:[UIImage imageNamed:@"tab_pressed_home_icon"] withFinishedUnselectedImage:[UIImage imageNamed:@"tab_home_icon"]];
tabBarItem1.imageInsets = UIEdgeInsetsMake(8, 0, -2, 0);
que establece un icono en la barra de pestañas.
Todo funciona bien hasta ahora anoche que actualizo Xcode 5.1
y ejecuta la aplicación en el simulador ios7.1.
aquí está la aplicación
ahora, cuando toco la barra de pestañas, el tamaño de la imagen del icono disminuye y cuando suelto la imagen del dedo vuelve a la normalidad. Pero si toco el ícono y lo arrastro, la imagen se verá así (escala hacia abajo).
Me gusta esto
como puede pasar esto ¿Hay alguna forma de resolver esto?
Gracias.
El mismo problema aqui. También después de actualizar a iOS 7.1 y xcode 5.1 Mi solución: el tamaño del elemento de la barra de pestañas se estableció en 4 para la parte inferior (en el inspector de tamaño) lo cambié a 0 como todos los demás y el problema desapareció.
Este problema se resolvió configurando los conjuntos de imagen de tabBarItem como han mencionado otros. Puede hacerlo en código o hacerlo en Interface Builder, no importa.
El punto importante es que la inserción superior SEA IGUAL a la inserción inferior.
Intenta esto, debería hacer el truco y no afectará las versiones anteriores.
Coloque las siguientes líneas en el método de inicio de cualquier controlador:
UIImage* image = [UIImage imageNamed: @"Your tabbar image name goes here"];
if ([image respondsToSelector: @selector(imageWithRenderingMode:)])
[self.tabBarItem setImage: [image imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal]];
Las inserciones superior e inferior están establecidas en su código, debería ser suficiente para establecer solo una de estas (por ejemplo, arriba). La razón por la que la imagen resaltada se comprime puede ser que el ráster tenga diferentes dimensiones, no como la imagen predeterminada; en este caso, las inserciones hacen que la imagen se amplíe verticalmente.
Lo dejo, mi solución está aquí:
Usa la función para redimensionar y hacer offset con UIImage
- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize andOffSet:(CGPoint)offSet{
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(offSet.x, offSet.y, newSize.width-offSet.x, newSize.height-offSet.y)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
y establece correctamente la imagen del elemento de la barra de pestañas:
UITabBarItem *barItem = [self.tabBarController.tabBar.items objectAtIndex:i];
CGSize size = CGSizeMake(49, 49);
CGPoint offset = CGPointMake(10, 10);
[barItem setFinishedSelectedImage:[self imageWithImage:selectedImage scaledToSize:size andOffSet:offset]
withFinishedUnselectedImage:[self imageWithImage:unSelectedImage scaledToSize:size andOffSet:offset]];
¡Si alguna otra solución sería de ayuda!
Mi problema es similar, el ícono de la barra de pestañas cambió su posición en la actualización 7.1, este problema es realmente molesto, e hice una solución rápida porque tengo que aprobar la aplicación. Era esto:
Ok, no estoy seguro de que sea la mejor solución, pero para mí funciona.
Mi respuesta se basa en otros publicados aquí: configuración en 0 de todos los ImageInsets en los elementos de la barra de pestañas:
for (UITabBarItem* item in self.tabBar.items)
{
[item setImageInsets: UIEdgeInsetsMake(0, 0, 0, 0)];
}
Mi solución fue dividir por 2 los puntos x e y, luego lo puse a izquierda, derecha, arriba y abajo respectivamente.
Puede colocar una UIView en la parte superior de la barra de pestañas y agregar un UITapGestureReognizer a la UIView. Cuando se toca, determino dónde está y llamo al elemento seleccionado apropiado para la barra de pestañas. Hack, pero funciona bastante bien y te permite mantener tus valores de inserción a lo que quieras.
@property UIView tabBarCover;//place on top of uitabbar and give it clear color background
- (void)viewDidLoad
{
[tabBar setSelectedItem:[tabBar.items objectAtIndex:0]];
UITapGestureRecognizer *singleFingerTap =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(handleSingleTap:)];
[tabBarCover addGestureRecognizer:singleFingerTap];
}
Luego, cada vez que se toca UIView, establezca el elemento seleccionado en función de dónde tocó el usuario. Tenía 3 elementos de la barra de pestañas, así que hice una lógica para la coordenada x.
-(void) handleSingleTap:(UITapGestureRecognizer *) recognizer
{
CGPoint location = [recognizer locationInView:[recognizer.view superview]];
//NSLog(@"tapped it %lf", location.x);
if(location.x<=105){
//1st 3rd tapped, do something
}
else if(location.x >105 && location.x<=210)
{
//do nothing, selected item stays same. this is glas
}else{
//must be in 3rd section so do that load
}
}
Espero eso ayude.
Solucioné el mismo problema usando esta categoría para UIImage que crea una imagen desde una vista UIV
+ (UIImage *) imageWithView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
Y luego, utilizando este método, puede crear una nueva imagen con el desplazamiento personalizado que necesita. (Solo necesito Y Y offset).
-(UIImage *) uiNewImageForTabBar: (UIImage *) i withOffsetForY: (CGFloat) offsetY
{
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, i.size.width, i.size.height+offsetY)];
[v setBackgroundColor:[UIColor clearColor]];
[v setOpaque:NO];
UIImageView *sub = [[UIImageView alloc] initWithImage:i];
[sub setY:offsetY];
[v addSubview:sub];
return [UIImage imageWithView:v];
}
Tuve el mismo problema en iOS 7.1 al intentar configurar las inserciones de la imagen por código como:
[self.tabBarItem setImageInsets:UIEdgeInsetsMake(5, 0, -5, 0)];
Así que lo resolví usando directamente el Tamaño del elemento de barra en mi Guión gráfico.
Tenga en cuenta que para que esto funcione debería asignar la imagen de su TabBarItem de la siguiente manera
UITabBar *tabBar = self.tabBarController.tabBar;
UITabBarItem *myItem = [tabBar.items objectAtIndex:0];
[homeItem setFinishedSelectedImage:[UIImage imageNamed:@"A.png"]
withFinishedUnselectedImage:[UIImage imageNamed:@"B.png"]];
en lugar de esta manera
[self.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"A.png"]
withFinishedUnselectedImage:[UIImage imageNamed:@"B.png"]];
Actualizar
Para acceder al Tamaño del elemento de la barra, seleccione directamente el elemento ''Elemento'' debajo de la escena de cualquiera de los hijos de su controlador de la barra de pestañas. (Imagen 1)