Линия не является гладкой на слое. Граница при его повороте - PullRequest
2 голосов
/ 27 ноября 2011

Мне нужно повернуть UIImageView:

UIImageView *img = [[UIImageView alloc] init];
img.layer.borderWidth = 3.0;
img.layer.borderColor = UIColorFromRGB(0xffffff).CGColor;
img.layer.shadowColor = UIColorFromRGB(0x000000).CGColor;
CATransform3D transform = CATransform3DMakeRotation ([Helper degreesToRadians:(5)], 1, 1, 1);
img.layer.shadowRadius  = 2.0;
img.layer.shouldRasterize = YES;

Проблема в том, что граница совсем не гладкая:

Screen shot from the simluator

Ответы [ 3 ]

3 голосов
/ 27 ноября 2011

Попробуйте добавить прозрачную рамку (возможно, 1 пиксель) вокруг вашего изображения.Смотрите эту ссылку .Проверьте UIImage+Alpha раздел на этой странице.

2 голосов
/ 31 декабря 2011

Я вижу, что большая часть решения этой проблемы - добавить прозрачную границу размером 1px, но она работает только в том случае, если мы не используем какую-либо границу вокруг UIImageView, если сам UIImageView имеет границу, и мы поворачиваем ее, тогда граница не является гладкой. Я все еще пытаюсь выяснить, как решить эту проблему.

ЗДЕСЬ, ЧТО Я СДЕЛАЛ, ЧТОБЫ ИСПРАВИТЬ ЭТОТ ВЫПУСК

 UIImage *thumbnail = [photo thumbnailImage:thumbnailSize.width 
                           transparentBorder:2 
                                cornerRadius:0 
                        interpolationQuality:kCGInterpolationHigh];

  CGPoint randomPoint = [self getRandomOriginPoint];

  UIImageView *thumbnailView = [[UIImageView alloc] initWithFrame:CGRectMake(10.0, 10.0, thumbnail.size.width, thumbnail.size.height)];

  [thumbnailView.layer setBorderWidth:2];
  [self setContentMode:UIViewContentModeCenter];
  [thumbnailView.layer setBorderColor:[UIColor whiteColor].CGColor];
  [thumbnailView.layer setShadowOffset:CGSizeMake(-3.0, 3.0)];
  [thumbnailView.layer setShadowRadius:3.0];
  [thumbnailView.layer setShadowOpacity:1.0];
  thumbnailView.layer.shouldRasterize = YES;

Я использовал UIImage + Resize.h из здесь , чтобы получить миниатюру изображения в моем коде, так что с этим даже после поворота изображения на любой угол граница будет выглядеть идеально!

1 голос
/ 03 октября 2014

Без использования категорий, решение, которое сделало наименьшее количество предположений

#import <QuartzCore/QuartzCore.h>

Мы будем использовать следующую переменную

UIView *myView;

Подтверждено, что он работает на UIImageViews / UIViews всех типов

myView.layer.shouldRasterize = YES; //the single line that solved this problem from the above

Вам не нужно добавлять границу любого типа, чтобы это работало.

 CATransform3D rotate = CATransform3DIdentity;
 myView.layer.shouldRasterize = YES;
 rotate = CATransform3DRotate(rotate,M_PI_4/8,0.0,0.0,1);
 myView.layer.transform = rotate;

Примечание. Этот ответ предназначен для объединения информации в единый ответ, который устраняет некоторые другие требования. В этом примере я использую M_PI_4 / 8, поскольку это хороший угол обзора, если у вас есть вид вида Stickie Note, который вы реализуете.

...