ios - 丸く - view radius




丸みを帯びたUIImage (5)

私はすでにいくつかの投稿を読んでいます。 QuartzCore/QuartzCore.hlayer.cornerRadiusとともに使用することをQuartzCore/QuartzCore.hlayer.cornerRadius

私はこの方法といくつかの方法を試しました。

さて、画像が動かないときはすべて正常に動作します。

しかし、私のプロジェクトでは常にイメージを移動します。 角の半径または影を追加すると、画像の動きが滑らかにならなくなります。 それは恐ろしく見えます!

それが私のイメージのサイズを変更する方法です:

CGSize newSize = CGSizeMake(200*height/image.size.height, 280);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(nil, newSize.width, newSize.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
CGContextClearRect(context, CGRectMake(0, 0, newSize.width, newSize.height));
CGContextDrawImage(context, CGRectMake(0, 0, newSize.width, newSize.height), image.CGImage);
CGImageRef scaledImage = CGBitmapContextCreateImage(context);
CGColorSpaceRelease(colorSpace);
CGContextRelease(context);
UIImage *newImage = [UIImage imageWithCGImage: scaledImage];
CGImageRelease(scaledImage);

画像のサイズを変更したり、影やコーナーの半径を追加したり、画像のスムーズな動きを維持するには、良い方法を知りたいです。


Charlie Seligmanのソリューションのより最適化されたメモリバージョンがあります。 この目的でUIImageViewを使用する必要はありません。

+ (UIImage *)imageWithRoundedCornersSize:(float)cornerRadius usingImage:(UIImage *)original
{
    CGRect frame = CGRectMake(0, 0, original.size.width, original.size.height);

    // Begin a new image that will be the new image with the rounded corners
    // (here with the size of an UIImageView)
    UIGraphicsBeginImageContextWithOptions(original.size, NO, original.scale);

    // Add a clip before drawing anything, in the shape of an rounded rect
    [[UIBezierPath bezierPathWithRoundedRect:frame
                                cornerRadius:cornerRadius] addClip];
    // Draw your image
    [original drawInRect:frame];

    // Get the image, here setting the UIImageView image
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

    // Lets forget about that we were drawing
    UIGraphicsEndImageContext();

    return image;
}

cornerRadiusをイメージサイズを2倍増やしたもの(image.size.width * 2)を指定すると、丸めイメージを取得できます。


Objective-Cの画像に丸い角を設定する:

yourImageView.layer.cornerRadius = yourRadius;                                   

yourImageView.clipsToBounds = YES;                                 

はい、可能です。

QuartzCore(#import)ヘッダをインポートし、UIImageViewのlayerプロパティで再生します。

ImageView.layer.cornerRadius = Radius;
ImageView.clipsToBounds = YES;

ロハンの答えは素晴らしいものです。 もし誰かがそれを自分のプロジェクトで動作するようにリパクタリングする必要があるのであれば、より新しいプログラマを助けるかもしれないきちんとしたリファクタリングがあります:

+ (UIImage *)imageWithRoundedCornersSize:(float)cornerRadius usingImage:(UIImage *)original
{    
    UIImageView *imageView = [[UIImageView alloc] initWithImage:original];

    // Begin a new image that will be the new image with the rounded corners
    // (here with the size of an UIImageView)
    UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, 1.0);

    // Add a clip before drawing anything, in the shape of an rounded rect
    [[UIBezierPath bezierPathWithRoundedRect:imageView.bounds
                            cornerRadius:cornerRadius] addClip];
    // Draw your image
    [original drawInRect:imageView.bounds];

    // Get the image, here setting the UIImageView image
    imageView.image = UIGraphicsGetImageFromCurrentImageContext();

    // Lets forget about that we were drawing
    UIGraphicsEndImageContext();

    return imageView.image;
}

// Get your image somehow
UIImage *image = [UIImage imageNamed:@"image.jpg"];

// Begin a new image that will be the new image with the rounded corners 
// (here with the size of an UIImageView)
 UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, [UIScreen mainScreen].scale);

 // Add a clip before drawing anything, in the shape of an rounded rect
  [[UIBezierPath bezierPathWithRoundedRect:imageView.bounds 
                        cornerRadius:10.0] addClip];
 // Draw your image
[image drawInRect:imageView.bounds];

 // Get the image, here setting the UIImageView image
  imageView.image = UIGraphicsGetImageFromCurrentImageContext();

 // Lets forget about that we were drawing
  UIGraphicsEndImageContext();

私が覚えている限り、このコードを使って移動してみてください。私はこれを使って、あなたがターゲットに移動できる丸いコーナーのイメージを作り出しています。 しかし、それはうまくスケールするようだ...





rounded-corners