旋转时,layer.border上的线条不平滑

时间:2011-11-27 11:53:18

标签: ios transform calayer catransform3d

我需要旋转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 个答案:

答案 0 :(得分:3)

尝试在图片周围添加透明边框(可能是1px)。见link。 查看该页面中的UIImage+Alpha部分。

答案 1 :(得分:2)

我看到这个问题的大部分答案是添加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;

我使用了来自here的UIImage + Resize.h来获取我的代码中的缩略图,所以即使你以任何角度旋转图像,边框看起来都很完美!

答案 2 :(得分:1)

无需使用类别,使得假设最少的解决方案

#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正在实现的视图。