ordenar - como organizar fotos en iphone 7
Cómo crear una galería en iOS (8)
Aquí hay una muy buena biblioteca llamada FGallery para iOS
-Soporta auto-rotación
-vista en miniatura
-enfocar
-borrar
Estoy comenzando a desarrollar una aplicación simple para iOS, y esta aplicación es una galería simple de una foto (tomada de un sitio web). El primer problema que encontré es cómo crear la vista para la galería.
La vista debería ser algo como esto (o la aplicación de fotos):
Sin embargo, hacer una vista de esta manera es problemático, primero porque usa una dimensión fija, y creo que es un poco difícil de implementar (para mí).
La otra forma es usar una celda personalizada dentro de una vista de tabla, como esta:
pero todavía está usando una dimensión fija.
¿Cuál es la mejor manera de crear una galería, sin usar ninguna lib de tercera parte (como Three20)?
Gracias por cualquier respuesta :)
PD. Creo que usar una dimensión fija es malo debido al nuevo iphone 4 (con una resolución diferente), ¿estoy en lo cierto?
Debería revisar AQGridView que hace exactamente lo que está tratando de lograr. Incluso si desea escribir su propio código personalizado, eche un vistazo a la fuente AQGridView ya que probablemente necesitará usar un UIScrollView como base.
En caso de que desee utilizar clases de terceros, los siguientes tutoriales se pueden mezclar, funcionaron para mí. Aquí hay una buena vista de cuadrícula:
selector de imágenes personalizado como uiimagepicker
Y si desea cargarlos de forma asíncrona, use esto: imagen de carga perezosa
Ambos tutoriales están muy bien descritos y tienen código fuente.
Escribí un tutorial sobre cómo construir una galería de medios utilizando una UICollectionView. Se rellena desde la biblioteca de fotos del usuario. Creo que funcionará perfectamente para lo que estás tratando de hacer.
Tutorial de programación para iPhone: Crear una galería de imágenes como sobre - Parte 1
Espero que ayude. ¡Aclamaciones!
Hice algo muy similar a esto en un proyecto propio. Acabo de mostrar algunas partes del código aquí, pero si desea ver el código completo, puede verlo en GitHub GitHub Repo
Primero creé una celda de vista de colección personalizada con un ImageView
en CustomCollectionCell.h
#import <UIKit/UIKit.h>
@interface CustomCollectionCell : UICollectionViewCell
@property (nonatomic , retain) UIImageView *imageView;
@end
en CustomCollectionCell.m
#import "CustomCollectionCell.h"
@implementation CustomCollectionCell
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self setupImageView];
}
return self;
}
#pragma mark - Create Subviews
- (void)setupImageView {
self.imageView = [[UIImageView alloc] initWithFrame:self.bounds];
self.imageView.autoresizingMask = UIViewAutoresizingNone;//UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self addSubview:self.imageView];
}
@end
Luego, en la vista donde quieres tener las miniaturas, configura CollectionView
en ThumbNailViewController.m (fragmento de código)
UICollectionView *collectionViewThumbnails;
en ThumbNailViewController.m (fragmento)
UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
collectionViewThumbnails=[[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height - 50) collectionViewLayout:layout];
if (collectionViewThumbnails && layout)
{
[collectionViewThumbnails setDataSource:self];
[collectionViewThumbnails setDelegate:self];
[collectionViewThumbnails registerClass:[CustomCollectionCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
[collectionViewThumbnails setBackgroundColor:[UIColor blackColor]];
[self.view addSubview:collectionViewThumbnails];
}
Luego tienes los métodos requeridos para las vistas de colección. Aquí puedes configurar lo que
//Number of items in the collectionview
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return [galleryData count];
}
//Set up what each cell in the collectionview will look like
//Here is where you add the thumbnails and the on define what happens when the cell is clicked
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
//initialize custom cell for the collectionview
CustomCollectionCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
[cell.imageView setClipsToBounds:YES];
cell.imageView.contentMode = UIViewContentModeScaleAspectFill;
//format url to load image from
NSString *url = [NSString stringWithFormat:@"http://andrecphoto.weebly.com/uploads/6/5/5/1/6551078/%@",galleryData[indexPath.item]];
//load thumbnail
[cell.imageView setImageWithURL:[NSURL URLWithString:url]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
//Sets up taprecognizer for each cell. (onlcick)
UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[cell addGestureRecognizer:tap];
//sets cell''s background color to black
cell.backgroundColor=[UIColor blackColor];
return cell;
}
//Sets size of cells in the collectionview
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(100, 100);
}
//Sets what happens when a cell in the collectionview is selected (onlclicklistener)
- (void)handleTap:(UITapGestureRecognizer *)recognizer {
//gets the cell thats was clicked
CustomCollectionCell *cell_test = (CustomCollectionCell *)recognizer.view;
//gets indexpath of the cell
NSIndexPath *indexPath = [collectionViewThumbnails indexPathForCell:cell_test];
if (isConnectedGal)
{
//sets the image that will be displayed in the photo browser
[photoGallery setInitialPageIndex:indexPath.row];
//pushed photobrowser
[self.navigationController pushViewController:photoGallery animated:YES];
}
}
Espero eso conteste tu pregunta.
La diferencia en la resolución no debería ser un problema ya que iOS, si recuerdo correctamente, amplía los componentes de la IU y las imágenes a la resolución correcta si detecta que tiene una pantalla retina. Un lado; recuerde comenzar a crear versiones de alta / baja resolución de sus gráficos si tiene la intención de admitir ambos tamaños de pantalla sin degradar la calidad.
Mientras diseñes las cosas en términos de puntos en lugar de píxeles (que es la forma en que se hace en XCode 4), iOS podrá manejar la escala de forma transparente. En una pantalla pequeña, un punto será un píxel, mientras que será dos píxeles en una pantalla de retina. Esto le permite renderizar cosas con un aspecto más nítido en las pantallas de retina. Source
Sé que esta pregunta es antigua, pero no vi a nadie que abordara el problema de los anchos fijos, así que pensé que podría contribuir por una vez.
Si no desea utilizar una biblioteca de terceros, debe hacer esto en las filas de UITableView. Debido a la forma en que UITableView almacena en caché las celdas, es relativamente liviano en la memoria. Ciertamente más que un UIView posiblemente muy grande dentro de un UIScrollView. Lo he hecho en ambos sentidos, y estaba mucho más feliz con el UITableView.
Dicho eso, ¿la próxima vez tengo que hacer esto? Planeo usar AQGridView.
Um, desde que salió ios6, la forma correcta de hacerlo es con vistas de colección:
Además, vea las dos sesiones de la WWDC 2012 sobre ellos:
Introducción a las vistas de colección
Vistas de colecciones avanzadas
Lamentablemente, Apple no incluyó una galería simple o un diseño de flujo de cobertura, pero es bastante fácil hacer una.