使用CALayer变换进行变换后,对UIView的边缘进行抗锯齿处理

Ole*_*leg 24 iphone objective-c rotation antialiasing uiview

我有一个UIView使用CALayer变换旋转的对象:

// Create uiview object.
UIImageView *block = [[UIImageView alloc] initWithFrame....]

// Apply rotation.
CATransform3D basicTrans = CATransform3DIdentity;
basicTrans.m34 = 1.0/-distance;
blockImage.layer.transform = CATransform3DRotate(basicTrans, rangle, 1.0f, 0.0f, 0.0f);
Run Code Online (Sandbox Code Playgroud)

旋转后,对象的边缘不会抗锯齿.我需要反他们.请帮帮我.怎么做到呢?

tar*_*mes 43

一种方法是将图像放在另一个大5像素的视图中.较大的视图应该有一个透明的栅格化边框,可以平滑UIImageView的边缘:

view.layer.borderWidth = 3; 
view.layer.borderColor = [UIColor clearColor].CGColor; 
view.layer.shouldRasterize = YES; 
view.layer.rasterizationScale = [[UIScreen mainScreen] scale];
Run Code Online (Sandbox Code Playgroud)

然后,将UIImageView放在此父视图中并居中(每个边缘周围2.5像素).

最后,旋转父视图而不是图像视图.

它工作得很好 - 你也可以在创建层次结构的类中封装整个事物.

  • 你可能想添加`view.layer.rasterizationScale = [[UIScreen mainScreen] scale];`以避免Retina屏幕上的模糊. (9认同)

Add*_*Dev 37

只需将此键值对添加到Info.plist:UIViewEdgeAntialiasing设置为YES.


tou*_*bun 25

检查allowsEdgeAntialiasing财产CALayer.

block.layer.allowsEdgeAntialiasing = YES; // iOS7 and above.
Run Code Online (Sandbox Code Playgroud)