为什么UIImage在Slider中裁剪后会出现模糊



我将此代码用于我的滑块,用于剪切UISlider的图像。当我拖动滑块时,图像会出现模糊,如果没有清晰,它怎么可能没有模糊和丢失

- (UIImage *) revealedTrackImageForCurrentValues {
    //Get left and right x positions
    float lowerHandleWidth = _lowerHandleHidden ? 2.0f : _lowerHandle.frame.size.width;
    float upperHandleWidth = _upperHandleHidden ? 2.0f : _upperHandle.frame.size.width;
    float xLowerValue = ((self.bounds.size.width - lowerHandleWidth) * (_lowerValue - _minimumValue) / (_maximumValue - _minimumValue))+(lowerHandleWidth/2.0f);
    float xUpperValue = ((self.bounds.size.width - upperHandleWidth) * (_upperValue - _minimumValue) / (_maximumValue - _minimumValue))+(upperHandleWidth/2.0f);
    //Crop the image
    CGRect croppedImageRect = CGRectMake(xLowerValue, 0.0f, xUpperValue - xLowerValue, self.trackImage.size.height);
    CGImageRef croppedImageRef = CGImageCreateWithImageInRect([self.trackImage CGImage], croppedImageRect);
    UIImage *croppedImage = [UIImage imageWithCGImage:croppedImageRef];
    CGImageRelease(croppedImageRef);
    return croppedImage;

}

我怎样才能做到不损失图像清晰度??

已编辑代码:

您必须将UIImage:划分为子类

UIImageView+裁剪.h

#import <UIKit/UIKit.h>
@interface UIImage (Cropping)
- (UIImage *)revealedTrackImageForRect:(CGRect)croppedImageRect;
@end

UIImageView+裁剪.m

#import "UIImage+Cropping.h"
@implementation UIImage (Cropping)

- (UIImage *)revealedTrackImageForRect:(CGRect)croppedImageRect
{
    //create drawing context
    UIGraphicsBeginImageContextWithOptions(croppedImageRect.size, NO, 0.0f);
    //draw
    [self drawAtPoint:CGPointMake(-croppedImageRect.origin.x, -croppedImageRect.origin.y)];
    //capture resultant image
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    //return image
    return image;
}
@end

然后调用您的代码:

#import "UIImage+Cropping.h"
- (UIImage *)revealedTrackImageForCurrentValues 
{
    //Get left and right x positions
    float lowerHandleWidth = _lowerHandleHidden ? 2.0f : _lowerHandle.frame.size.width;
    float upperHandleWidth = _upperHandleHidden ? 2.0f : _upperHandle.frame.size.width;
    float xLowerValue = ((self.bounds.size.width - lowerHandleWidth) * (_lowerValue - _minimumValue) / (_maximumValue - _minimumValue))+(lowerHandleWidth/2.0f);
    float xUpperValue = ((self.bounds.size.width - upperHandleWidth) * (_upperValue - _minimumValue) / (_maximumValue - _minimumValue))+(upperHandleWidth/2.0f);
    // Get rect
    CGRect croppedImageRect = CGRectMake(xLowerValue, 0.0f, xUpperValue - xLowerValue, self.trackImage.size.height);
    //Get cropped image
    UIImage *croppedImage = [self.trackImage revealedTrackImageForRect: croppedImageRect];
    return croppedImage;
}

最新更新