UICollectionView con UICollectionViewCell personalizado

Tengo una UICollectionView con una celda personalizada. Tuve esto funcionando completamente hasta que intenté crear la vista de colección de manera programática en lugar de hacerlo desde el guión gráfico. Hice esto porque no pude cambiar el tamaño de marco de la vista de colección para diferentes tamaños de pantalla. Entonces intenté crear una vista de colección mediante progtwigción. Mi problema es que mis celdas personalizadas no funcionan. Para mis celdas personalizadas dibujo un círculo en la vista, el usuario cornerradius en la vista de la celda, tengo una UILabel y una UIImageView.

Dibujo el círculo y realizo la cosa cornerradius en el drawRect: de la celda personalizada. El rest es decir: poner image en ImageView y text en UILabel, lo hago en el método collectionView datasource.

El problema que estoy teniendo es que no consigo el funcionamiento de cornerradius aunque, extrañamente, puedo dibujar un círculo en la vista. El segundo problema es que no consigo la image en la vista de la image y ningún text en la label

Aquí está mi código. Creo la vista de colección en ViewDidload: method.

  [layout setSectionInset:UIEdgeInsetsMake(24, 10, 24, 10)]; [layout setScrollDirection:UICollectionViewScrollDirectionHorizontal]; [layout setMinimumLineSpacing:15]; [layout setMinimumInteritemSpacing:10]; self.collectionView = [[UICollectionView alloc]initWithFrame:rect collectionViewLayout:layout]; self.collectionView.delegate=self; self.collectionView.dataSource=self; [self.collectionView registerClass:[customCell class] forCellWithReuseIdentifier:@"cell"]; self.collectionView.backgroundColor= [UIColor blackColor]; self.searchBar.delegate = self; self.locations = [[NSArray alloc]init]; self.location = [[NSString alloc]init]; [self.view addSubview:self.collectionView]; 

Aquí está el drawRect: para mi customCell.m

 - (void)drawRect:(CGRect)rect { UIBezierPath *circularpath = [[UIBezierPath alloc]init]; CGRect Rect = CGRectMake(6, 20, 130, 130);//338 CGPoint mypoint = CGPointMake(Rect.origin.x + (Rect.size.width / 2), Rect.origin.y + (Rect.size.height / 2)); NSLog(@"Circle center point::%f, %f", mypoint.x, mypoint.y); circularpath = [UIBezierPath bezierPathWithOvalInRect:Rect]; circularpath.lineWidth = 3.0; [[UIColor whiteColor]setStroke]; UIImage *ori = [UIImage imageNamed:@"drogba.jpg"]; UIImage *image = [[UIImage alloc]initWithCGImage:ori.CGImage scale:1.45 orientation:UIImageOrientationUp]; [[UIColor colorWithPatternImage:image]setFill]; NSLog(@"Circular path:%@", circularpath); //this works [circularpath stroke]; //this does not self.viewForBaselineLayout.layer.cornerRadius = 8.0f; } 

y aquí está mi método de fuente de datos

 customCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath]; UIImage *image = [[UIImage alloc]init]; if([self.allInfo count]>0){ image = [self getImageForLocation:[self.allInfo objectAtIndex:indexPath.item]]; NSDictionary *dict = [[NSDictionary alloc]initWithDictionary:[self.allInfo objectAtIndex:indexPath.item]]; NSDictionary *city = [dict objectForKey:@"city"]; NSString *name = [[NSString alloc]initWithString:[city objectForKey:@"name"]]; cell.locationLabel.text = name; cell.imageView.image = [self getImageForSky:dict]; cell.viewForBaselineLayout.backgroundColor = [UIColor colorWithPatternImage:image]; cell.tempLabel.text = [self getTempForLocation:dict]; } NSLog(@"image description:%f", image.size.height); count =1; return cell; 

No creo que sea un problema con mis datos, porque todo lo que he cambiado es crear vista de Colección mediante progtwigción en lugar de utilizar Storyboard.

EDIT :: Tuve que asignar init la vista de image y las tags para la celda personalizada y luego agregarlas como subvista. ahora se resuelven 3 de mis 4 problemas. Aún no consigo que el radio de la esquina funcione para mí. Quiero un borde ligeramente curvado para mi celda

Así que en primer lugar, porque eliminé la celda del guión gráfico, tuve que agregar las vistas a la vista de la celda como subvista. En segundo lugar, para get las esquinas networkingondeadas, también tuve que establecer masksToBounds en YES Todo esto tenía que hacerse en el método initWithFrame: método de la celda personalizada. Aquí el fragment de código

 - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self.imageView = [[UIImageView alloc]init]; self.imageView.frame = CGRectMake(26, 27, 90, 90); self.tempLabel = [[UILabel alloc]initWithFrame:CGRectMake(26, 125, 90, 21)]; self.locationLabel = [[UILabel alloc]initWithFrame:CGRectMake(11, 156, 121, 21)]; self.tempLabel.textAlignment = NSTextAlignmentCenter; self.tempLabel.textColor = [UIColor whiteColor]; self.locationLabel.textAlignment = NSTextAlignmentCenter; self.locationLabel.textColor = [UIColor whiteColor]; [self.viewForBaselineLayout addSubview:self.imageView]; [self.viewForBaselineLayout addSubview:self.tempLabel]; [self.viewForBaselineLayout addSubview:self.locationLabel]; self.viewForBaselineLayout.layer.masksToBounds = YES; self.viewForBaselineLayout.layer.cornerRadius = 8.0f; } return self; } 

Tiene el método init en su celda personalizada

 - (id)initWithFrame:(CGRect)frame 

Cambie el radio de la esquina en este método. PS funciona para mí.