Sug*_*uge 2 core-graphics objective-c uiimageview uiimage ios
我需要进行UIImageView支持放大/缩小,最重要的是,当放大图像时,应该看到清晰的大像素,而不是模糊处理的效果,如下图所示.
它应该是这样的:

不应该那样:

我的代码不起作用:
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
imageView = [[ColorPickImageView alloc] initWithImage:self.image];
imageView.contentMode = UIViewContentModeScaleAspectFit;
[self addGestureRecognizerToView:imageView];
[imageView setUserInteractionEnabled:YES];
[imageView setMultipleTouchEnabled:YES];
[self.view addSubview:imageView];
[imageView setTranslatesAutoresizingMaskIntoConstraints:NO];
NSDictionary *views = NSDictionaryOfVariableBindings(imageView);
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[imageView]-0-|" options:0 metrics:nil views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[imageView]-0-|" options:0 metrics:nil views:views]];
}
- (void)addGestureRecognizerToView:(UIView *)view
{
UIPinchGestureRecognizer *pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchView:)];
[view addGestureRecognizer:pinchGestureRecognizer];
}
- (void)pinchView:(UIPinchGestureRecognizer *)pinchGestureRecognizer
{
UIView *view = pinchGestureRecognizer.view;
if (pinchGestureRecognizer.state == UIGestureRecognizerStateBegan || pinchGestureRecognizer.state == UIGestureRecognizerStateChanged) {
view.transform = CGAffineTransformScale(view.transform, pinchGestureRecognizer.scale, pinchGestureRecognizer.scale);
pinchGestureRecognizer.scale = 1;
}
}
Run Code Online (Sandbox Code Playgroud)
好的,我很感兴趣,并且忍不住设置了一个快速的15分钟测试.结果与我在评论中引用的SO答案一致.以下工作正常,我可以生成像素化图像:
- (void)viewDidLoad {
[super viewDidLoad];
UIImage *image = [UIImage imageNamed:@"LocationDot"];
self.imageView.image = image;
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
self.imageView.layer.magnificationFilter = kCAFilterNearest;
// self.imageView.layer.shouldRasterize = YES;
// self.imageView.transform = CGAffineTransformMakeScale( 4, 4);
}
Run Code Online (Sandbox Code Playgroud)
这会产生:

默认情况下kCAFilterLinear你会得到这个:

应用变换时,它也具有所需的效果:

在shouldRasterize没有任何效果,符合市场预期.使用位图作为内容,如果在图层上放置变换然后使用其他图层进行合成,则只会产生一些效果.即便如此,文档说:
如果光栅化位图在合成期间需要缩放,则根据需要应用minificationFilter和magnificationFilter属性中的滤镜.