24

我对目标 c 非常陌生,我只是在了解我的方位。我想做一些非常简单的事情,但事实证明这是一个相当大的挑战:

我正在尝试将图像显示到UIImageView. 我显示的图像很大,我希望它按比例缩小以适应UIImageView. 我尝试设置AspectFit查看模式,但图像显示为原始大小并被UIImageView. 我的代码如下:

- (void)changeImages
{
    UIImage* img11 = nil;

    img11 = [UIImage imageWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"dog" ofType:@"jpeg"]];

    u11.contentMode = UIViewContentModeScaleAspectFit;
    u11.image = img11;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [self changeImages];
}

任何人都可以对此有所了解吗?

谢谢!

4

6 回答 6

32

嗨,我会试试这个...

- (void)changeImages
{
    UIImage *img11 = [UIImage imageNamed@"dog.jpeg"];

    u11.contentMode = UIViewContentModeScaleAspectFit;
    u11.clipsToBounds = YES;
    [u11 setImage:img11];
}

- (void)viewWillAppear:animated
{
    [super viewWillAppear:animated];

    [self changeImages];
}

这将缩放图像(向上或向下),使其适合 imageView。拥有 clipsToBounds 不是必需的,但会阻止图像显示在 imageView 的框架之外。

HTH。

于 2012-09-23T14:02:37.300 回答
17

添加到你的 UIViewController.m:

-(UIImage *)resizeImage:(UIImage *)image imageSize:(CGSize)size
{
    UIGraphicsBeginImageContext(size);
    [image drawInRect:CGRectMake(0,0,size.width,size.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    // here is the scaled image which has been changed to the size specified
    UIGraphicsEndImageContext();
    return newImage;
}

使用:

UIImage *image = [UIImage imageNamed:@"image.png"];
CGSize size = CGSizeMake(50, 63); // set the width and height 
UIImage *resizedImage = [self resizeImage:image imageSize:size];

我希望它有所帮助。

于 2013-09-24T11:53:07.067 回答
4
CGSize size=CGSizeMake(79, 84);//set the width and height
UIGraphicsBeginImageContext(size);
[image drawInRect:CGRectMake(0,0,size.width,size.height)];
UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext();
//here is the scaled image which has been changed to the size specified
UIGraphicsEndImageContext();

这肯定有效,不要忘记导入 QuartzCore FrameWork..

祝你编码愉快 (^_^)....

于 2013-02-23T05:19:21.110 回答
1

您还可以在 Interface Builder 的 Attributes Inspector 中将 View:Mode 设置为 Aspect Fit

于 2015-10-15T04:14:26.757 回答
0

我知道这已经过时了,但我想根据斯坦福 193p 2017 第 11 讲(大约 18:45)添加一个响应,并且对于任何快速查看的人,因为这是为我显示的第一个搜索结果。

基本上,子类 UIView 并使其看起来像:

class U11: UIView {
    var myImage: UIImage? { didSet { setNeedsDisplay() }}
    override func draw(_ rect: CGRect) {
        myImage?.draw(in: bounds)
    }
}

然后设置图像:

func changeImage() {
    if let img11 = UIImage(named: "dog.jpeg"){
            u11.myImage = img11
    }
}

这非常简单,图像占据了视图边界内的整个空间。

于 2019-10-15T15:48:18.410 回答
0

我做了以下操作,它帮助将模式从默认值“缩放填充”更改为“纵横比填充”

并添加如下代码行(我是在单元格配置中完成的):

cell.photo.clipsToBounds = true
于 2016-07-15T20:01:43.203 回答