2016-03-20 9 views

答えて

7
あなたは、画像のコンテキストを作成する切り出し画像を描画して、ストロークパスするQuartzCore機能を使用することができ

- (UIImage *)imageWithBorderAndRoundCornersWithImage:(UIImage *)image lineWidth:(CGFloat)lineWidth cornerRadius:(CGFloat)cornerRadius { 
    UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale); 
    CGRect rect = CGRectZero; 
    rect.size = image.size; 
    CGRect pathRect = CGRectInset(rect, lineWidth/2.0, lineWidth/2.0); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(context); 

    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:pathRect cornerRadius:cornerRadius]; 

    CGContextBeginPath(context); 
    CGContextAddPath(context, path.CGPath); 
    CGContextClosePath(context); 
    CGContextClip(context); 

    [image drawAtPoint:CGPointZero]; 

    CGContextRestoreGState(context); 

    [[UIColor whiteColor] setStroke]; 
    path.lineWidth = lineWidth; 
    [path stroke]; 

    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return finalImage; 
} 

取ります

without border

となりますが:

enter image description here

-1

You 簡単な方法でこれを行うには、UbmageViewが必要です。 UIViewのCALayerの典型的なプロパティは、四角形(角の半径)と罫線の太さ/色です。最も簡単な方法は、これを実装するためにUIViewのUIImageViewまたは他のタイプを持つことです。

そういったことが仕事をするかもしれません。

let myImg = UIImage(named: "some_image.png") 
let imgView = UIImageView(image: myImg) 
imgView.clipsToBounds = true 
imgView.layer.cornerRadius = 0.5*imgView.frame.width 
imgView.layer.borderWidth = 5.0 //Or some other value 
imgView.layer.borderColor = UIColor.whiteColor().CGColor 
+0

これにより、イメージのサイズとこれを行うデバイスのスケールにイメージのサイズが変更されます。それが望ましい効果であれば問題ありませんが、OPはこれを認識していなければなりません。また、この技法は、丸みを帯びたコーナーの外側エッジに沿って望ましくないアーチファクトを生じることがあることにも留意されたい。これを解決するには、画像ビューをマスキングします。 http://stackoverflow.com/a/30125297/1271826を参照してください。 – Rob

関連する問題