【问题标题】:set size of an image programatically以编程方式设置图像的大小
【发布时间】:2013-11-07 08:44:44
【问题描述】:

有什么方法可以在我的 NavigationBar 中以编程方式设置图像的大小,而不是手动更改?

这是创建按钮的代码:

UIBarButtonItem *Share = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"fb_share.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(Share:)];

我的图像尺寸是 256*256,所以它只是以这个分辨率显示,整个屏幕都乱了。

【问题讨论】:

    标签: ios uinavigationcontroller uibarbuttonitem


    【解决方案1】:

    您只想更改图像的大小?如果是这样,这样的事情应该可以工作:

    // Given a UIImage image and a CGSize newSize:
    
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    

    然后使用newImage 作为 UIBarButtonItem 的图像。

    【讨论】:

    • 你必须首先声明你的 UIImage ,并设置一个 CGSize 新大小。但如果我没记错的话,那应该可以。此外,如果您仍然遇到问题,这可能会有所帮助:stackoverflow.com/questions/6435118/…
    【解决方案2】:

    通常你应该使用contentMode(在这种情况下UIViewContentModeScaleAspectFit)每个UIView子类都有这个属性通常你可以用它来UIImageView。但我几乎可以肯定这不适用于UIBarButtonItem。试试吧,但你可能会碰壁。

    如果我的预测是正确的,您必须以编程方式调整图像大小:

    UIImage *myImage = [UIImage imageNamed:@"fb_share"];
    float maximumHeight = 44;
    float ratio = maximumHeight/ myImage.size.height;
    CGSize imageNewSize = CGSizeMake(myImage.size.width*ratio, maximumHeight);
    UIGraphicsBeginImageContextWithOptions(imageNewSize, NO, 0.0);
    [myImage drawInRect:CGRectMake(0, 0, imageNewSize.width, imageNewSize.height)];
    UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    UIBarButtonItem *Share = [[UIBarButtonItem alloc] initWithImage:resizedImage style:UIBarButtonItemStyleBordered target:self action:@selector(Share:)];
    

    【讨论】:

    • 是的,但这只是调整了图像的高度。一旦我尝试调整最大宽度,就会弹出错误:重新定义比率。
    • 噢,我犯了一个错误。将第三行从 float ratio = myImage.size.height/maximumHeight; 更改为 float ratio = maximumHeight/ myImage.size.height;
    • 如果你有重定义错误,你应该寻找这个重定义(你声明了两次相同的变量名)。
    • 但是已经有float ratio = maximumHeight/ myImage.size.height;
    • 是的,现在我编辑我的答案。改变它,而不是添加它。如果你有重新定义错误,就像我说你有两次声明的变量比率。更改名称或删除重新定义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    相关资源
    最近更新 更多