Tengo un UICollectionView con una costumbre de la célula. Yo tenía este trabajo completamente hasta que traté de crear la colección de la vista mediante programación en lugar de a partir del storyboard. Hice esto porque yo no era capaz de cambiar el tamaño del marco de la vista de colección para los diferentes tamaños de pantalla. Así que traté de crear una colección de la vista mediante programación. Mi problema es mi costumbre células no están trabajando.
Para mi costumbre células yo dibuje un círculo en la vista de usuario cornerradius en el punto de vista de la célula, tiene un UILabel y un UIImageView.

Puedo dibujar el círculo y el realizar el cornerradius cosa en la drawRect: de la costumbre de la célula. El resto yo.e: poner imagen en el ImageView y texto en UILabel, yo lo hago en el collectionView datasource método.

El problema que estoy teniendo es que no entiendo la cornerradius cosa funciona, aunque extrañamente me puede dibujar un círculo en la vista. el segundo problema es que no tengo la imagen en la vista de imagen y no de texto en la etiqueta

Aquí está mi código. Puedo crear la vista de colección en ViewDidload: método.

 [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í es 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 origen de datos método

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 lo único que ha cambiado es la creación de la Colección de la vista mediante programación en lugar de utilizar el storyboard.

EDITAR::
Tuve que alloc init la vista de la imagen y las etiquetas de las celdas personalizado y, a continuación, agregarlos como subvista. ahora 3 de mis 4 problemas están resueltos. Todavía no puedo obtener el radio de la esquina a trabajar para mí. Quiero ligeramente curvada de la frontera para mi celular

OriginalEl autor nupac | 2014-01-03

2 Comentarios

  1. 9

    Así que en primer lugar, porque me quitaron el celular desde el guión, he tenido que añadir las vistas a la celda de ver como subvista. En segundo lugar, para obtener las esquinas redondeadas, tenía que establecer también masksToBounds a YES Todo esto tenía que ser hecho en el initWithFrame: método de la celda personalizada. Aquí el fragmento 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;
    }

    OriginalEl autor nupac

  2. 0

    Usted tiene el método init en Su celda personalizada

    - (id)initWithFrame:(CGRect)frame

    cambiar la radio de la esquina en este método.
    P. S. me Funciona.

    no me funciona 🙁

    OriginalEl autor HereTrix

Dejar respuesta

Please enter your comment!
Please enter your name here