objective-c – 如何将UIImage添加到分组的UITableViewCell,以便圆角?

前端之家收集整理的这篇文章主要介绍了objective-c – 如何将UIImage添加到分组的UITableViewCell,以便圆角?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将图像添加到分组的UITableView中的表格单元格中,但图像的边角不会被剪切.什么是最好的方式去剪裁这些(除了剪贴他们在Photoshop?表内容是动态的.)

例如,表中的第一个图像只需要左上角的四舍五入.

解决方法

这是我的解决方案,可以使用一些重构:
void addRoundedRectToPath(CGContextRef context,CGRect rect,float ovalWidth,float ovalHeight,BOOL top,BOOL bottom)
{
    float fw,fh;
    if (ovalWidth == 0 || ovalHeight == 0) {
        CGContextAddRect(context,rect);
        return;
    }
    CGContextSaveGState(context);
    CGContextTranslateCTM (context,CGRectGetMinX(rect),CGRectGetMinY(rect));
    CGContextScaleCTM (context,ovalWidth,ovalHeight);
    fw = CGRectGetWidth (rect) / ovalWidth;
    fh = CGRectGetHeight (rect) / ovalHeight;
    CGContextMoveToPoint(context,fw,fh/2);
    CGContextAddArcToPoint(context,fh,fw/2,0);

    NSLog(@"bottom? %d",bottom);

    if (top) {
        CGContextAddArcToPoint(context,fh/2,3);
    } else {
        CGContextAddArcToPoint(context,0);
    }

    if (bottom) {
        CGContextAddArcToPoint(context,0);
    }

    CGContextAddArcToPoint(context,0);
    CGContextClosePath(context);
    CGContextRestoreGState(context);
}

- (UIImage *)roundCornersOfImage:(UIImage *)source roundTop:(BOOL)top roundBottom:(BOOL)bottom {
    int w = source.size.width;
    int h = source.size.height;

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(NULL,w,h,8,4 * w,colorSpace,kCGImageAlphaPremultipliedFirst);

    CGContextBeginPath(context);
    CGRect rect = CGRectMake(0,h);
    addRoundedRectToPath(context,rect,4,top,bottom);
    CGContextClosePath(context);
    CGContextClip(context);

    CGContextDrawImage(context,CGRectMake(0,h),source.CGImage);

    CGImageRef imageMasked = CGBitmapContextCreateImage(context);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);

    return [UIImage imageWithCGImage:imageMasked];    
}

实现这些功能,然后检查cellForRowAtIndexPath委托方法中的indexPath,以确定要舍入的角.

if (indexPath.row == 0) {
            cell.imageView.image = [self roundCornersOfImage:coverImage roundTop:YES roundBottom:NO];
        } else if (indexPath.row == [indexPath length]) {
            cell.imageView.image = [self roundCornersOfImage:coverImage roundTop:NO roundBottom:YES];
        } else {
            cell.imageView.image = coverImage;
        }

猜你在找的C&C++相关文章