2015-09-25 111 views
3

我目前正在为图像添加一个矩形,以防它不是平方“填充”剩余空间,使其成为方形。这个想法是,这是一个便宜的方法(就“迫使”图像被平方所需的时间而言)。Swift - 将颜色添加到CGrect

正如您在附件中看到的那样,我生成的方块没有颜色,这可能会让用户感到困惑。这就是为什么我想为我生成的CGRect添加颜色的原因。问题是我没有找到任何方法来做到这一点。任何建议如何给这个广场生成颜色,将非常感激。

enter image description here

enter image description here

当前的代码我不得不这样做是:

func forceSquaredImage(image: UIImage) -> UIImage{ 
    let maxDimension = max(image.size.height, image.size.width) 

    var newImage : UIImage = image 

    if(image.size.height > image.size.width){ 

     UIGraphicsBeginImageContextWithOptions(CGSize(width: maxDimension, height: maxDimension), false, 0.0); 

     image.drawInRect(CGRectMake(image.size.height/2-image.size.width/2, 0, image.size.width, image.size.height)) 
     newImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 

    }else if(image.size.height < image.size.width){ 

     UIGraphicsBeginImageContextWithOptions(CGSize(width: maxDimension, height: maxDimension), false, 0.0); 
     image.drawInRect(CGRectMake(0, image.size.width/2-image.size.height/2, image.size.width, image.size.height)) 
     newImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 
     return newImage 

    } 

    return newImage 

} 

期望的结果会是这样的(红色就是在这样的一个例子情况):

enter image description here

回答

3

与背景颜色只需填写您绘制图像前:

func forceSquaredImage(image: UIImage) -> UIImage{ 
    let maxDimension = max(image.size.height, image.size.width) 

    var newImage : UIImage = image 
    UIGraphicsBeginImageContextWithOptions(CGSize(width: maxDimension, height: maxDimension), false, 0.0); 
    UIColor.redColor().set() 
    UIBezierPath(rect: CGRect(x:0, y: 0, width:maxDimension, height:maxDimension)).fill() 
    if(image.size.height > image.size.width) { 
     image.drawInRect(CGRectMake(image.size.height/2-image.size.width/2, 0, image.size.width, image.size.height)) 
     } 
    else if (image.size.height < image.size.width) { 
     image.drawInRect(CGRectMake(0, image.size.width/2-image.size.height/2, image.size.width, image.size.height)) 
     } 
     newImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 

     return newImage 
} 
+0

这就是我所说的。我尽量避免提供代码,因为如果他自己编写代码,OP更有可能学习。 –

+0

请注意,这是一个iOS问题,所以您应该使用UIColor,而不是NSColor。 (我编辑了你的答案) –

+0

我试着用你的代码,不得不对NSBezierPath进行一些修改,以: UIBezierPath(rect:CGRect(x:0,y:0,width:maxDimension,height:maxDimension)) 但是,我得到以下警告:初始化程序的结果未使用 和我得到了与以前相同的结果: – Waclock

1

试试这个:(未测试,可能需要调整)

创建UIBezierPath这是使用bezierPathWithRect你关闭屏幕背景下的全尺寸。

使用UIColor方法set(或setFill)将当前描边/填充或填充颜色设置为接收者。

使用UIBezierPath方法fill填充图形上下文中当前填充颜色的路径。

然后像现在这样在上下文中绘制图像。

+0

我没有看到任何bezierPathWithRect选项,我使用的Xcode 7:/ – Waclock

+0

方法签名将成为雨燕略有不同。像'BezierPath(rect:)'' –