这是原始图像。origin image
我将其设置如下:
self.layerView.contentsCenter = CGRectMake(0.25, 0.25, 0.5, 0.5);
然后显示如下:change image
但是根据苹果公司的解释,应该缩放而不是消失,您可以看到更改图像的中心部分消失。
发生了什么?
您能帮我吗,谢谢。
完整代码:
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic,strong) UIView *erView;
@property (nonatomic,strong) CALayer *layerView;
@end
@implementation ViewController
#pragma mark - life cycle
- (void)viewDidLoad {
[super viewDidLoad];
[self setUpView];
}
#pragma mark - set up
- (void)setUpView{
self.view.backgroundColor = [UIColor redColor];
self.erView = [[UIView alloc] initWithFrame:CGRectMake(50, 100, 200, 200)];
[self.view addSubview:self.erView];
self.layerView = [CALayer layer];
self.layerView.frame = CGRectMake(0, 0, 200, 200);
self.layerView.backgroundColor = [UIColor blueColor].CGColor;
[self.erView.layer addSublayer:self.layerView];
UIImage *image = [UIImage imageNamed:@"picture"];
[self addSpriteImage:image withContentRect:CGRectMake(0, 0, 1, 1) toLayer:self.layerView];
self.layerView.contentsCenter = CGRectMake(0.25, 0.25, 0.5, 0.5);
}
- (void)addSpriteImage:(UIImage *)image withContentRect:(CGRect)rect toLayer:(CALayer *)layer{
layer.contents = (__bridge id)image.CGImage;
layer.contentsGravity = kCAGravityResizeAspect;
layer.contentsRect = rect;
}
@@ zrzka,谢谢您的回复,对我来说非常有用!我知道很多当我读到《 iOS CoreAnimation Advanced Techniques》这本书时,我感到有些困惑:
self.layerView.contentsCenter = CGRectMake(0.25, 0.25, 0.5, 0.5);
self.layerView.contentsCenter = CGRectMake(0.25, 0.25, 0.8, 0.8);
它会像这样显示,最让我感到困惑的是...
“水平,有点像1像素(宽度)”。为什么水平(1像素)与垂直(0像素)不同?
我如何实现像image5这样的两种效果?
代码:
let image = UIImage(named: "origin")
contentsView.contentMode = .scaleAspectFit
contentsView.layer.contents = image?.cgImage
contentsView.layer.contentsCenter = CGRect(x: 0.25, y: 0.25, width: 0.5, height: 0.5);
这是预期的,它取决于两件事:
彩色叠加:
拉伸是什么意思?可以将其拉伸成较大的图像或较小的图像。较小的图像表示宽度/高度甚至可以为零。
比较这两个屏幕截图:
发生了什么事?
更新:
如果contentsCenter更改如下:
self.layerView.contentsCenter = CGRectMake(0.25, 0.25, 0.8, 0.8);
它将显示为...
默认情况下,此属性中的值设置为单位矩形
contentsCenter
,这将导致整个图像在两个维度上缩放。如果您指定的矩形延伸outside单位矩形,则结果为undefined。
[(0.0,0.0) (1.0,1.0)
您是在说这句话:
您已经在单位矩形之外-25%宽度(t / l)+ 80%宽度(t / c)+ 25%宽度(t / r)= 130%宽度(1.3> 1.0)。结果是不确定的。
@@ zrzka,谢谢您的回复,对我来说非常有用!我知道很多当我读到《 iOS CoreAnimation Advanced Techniques》这本书时,我感到有些困惑:
0.25, 0.25, 0.8, 0.8
self.layerView.contentsCenter = CGRectMake(0.25, 0.25, 0.5, 0.5);
image1
它将像这样显示,最让我感到困惑的是...
self.layerView.contentsCenter = CGRectMake(0.25, 0.25, 0.8, 0.8);
“水平,有点像1像素(宽度)”。为什么水平(1像素)与垂直(0像素)不同?
我如何实现像image3这样的两种效果?