如何使imageView固定大小和圆角

时间:2014-12-01 18:12:49

标签: ios parse-platform

我正在使用Parse.com构建一个简单的应用程序。我想知道是否有任何方法可以使imageView大小固定(例如30x30px)并围绕图像的角落?

   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    //-------------------------------------------------------------------------------------------------------------------------------------------------
    {
        PFTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
        if (cell == nil) cell = [[PFTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];

        PFUser *user = users[indexPath.row];
        cell.textLabel.text = user[PF_USER_FULLNAME];

        PFImageView *imageView = [[PFImageView alloc]  init];
        [imageView setBackgroundColor:[UIColor clearColor]];
        cell.imageView.image = [UIImage imageNamed:@"tab_profile.png"]; // placeholder image

        cell.imageView.file = (PFFile *)user[PF_USER_THUMBNAIL]; // remote image

        [cell.imageView loadInBackground];

        return cell;
    }

请提供任何建议,我是Xcode和Parse SDK的新手......

1)enter image description here

2)enter image description here

2 个答案:

答案 0 :(得分:2)

这是我通常用来在imageView上获取圆圈的方法:

  1. 裁剪(不调整大小)图像以使其成为正方形。下面的方法将图像大小调整为您作为CGSize传递的任何大小:

    (UIImage *)squareImageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize
    {
        double ratio;
        double delta;
        CGPoint offset;
    
        //make a new square size, that is the resized imaged width
        CGSize sz = CGSizeMake(newSize.width, newSize.width);
    
        //figure out if the picture is landscape or portrait, then
        //calculate scale factor and offset
        if (image.size.width > image.size.height)
        {
            ratio = newSize.width / image.size.width;
            delta = (ratio*image.size.width - ratio*image.size.height);
            offset = CGPointMake(delta/2, 0);
        } else {
            ratio = newSize.width / image.size.height;
            delta = (ratio*image.size.height - ratio*image.size.width);
            offset = CGPointMake(0, delta/2);
        }
    
        //make the final clipping rect based on the calculated values
        CGRect clipRect = CGRectMake(-offset.x, -offset.y,
                             (ratio * image.size.width) + delta,
                             (ratio * image.size.height) + delta);
    
    
        //start a new context, with scale factor 0.0 so retina displays get
        //high quality image
        if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
            UIGraphicsBeginImageContextWithOptions(sz, YES, 0.0);
        } else {
            UIGraphicsBeginImageContext(sz);
        }
        UIRectClip(clipRect);
        [image drawInRect:clipRect];
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    
        return newImage;
    }
    
  2. 然后,调用刚刚创建的方法,并应用角半径(在这种情况下,它将是一个圆):

    imageView.image = [self squareImageWithImage:imageNormal scaledToSize:CGSizeMake(50, 50)]; // assuming you want a 50x50px image
    // convert imageview to circle
    imageView.layer.cornerRadius = cell.imageView.frame.size.width / 2;
    imageView.clipsToBounds = YES;
    

    您可以使用同一个调用将cornerRadius的数量减少到其他内容。

答案 1 :(得分:0)

我就是这样做的:

包含修复尺寸的图片

如果可以使用Storyboard并为30px值的PFImageView创建2个大小约束,但是如果项目不使用大小类,它应该没有约束,只需为图像设置适当的大小。如果您体验到形状变化,您也可以使用查看模式。

TooManyEduardos的圆形图像解决方案是正确的,如果你不想让圆圈只是玩数字。

//1
imageView.layer.cornerRadius = cell.imageView.frame.size.width / 2;
//2
imageView.layer.cornerRadius = cell.imageView.frame.size.width / 4;
//3
imageView.layer.cornerRadius = cell.imageView.frame.size.width / 6;
//4    
imageView.layer.cornerRadius = cell.imageView.frame.size.width / 8;