【问题标题】:How can I change the image displayed in a UIImageView programmatically?如何以编程方式更改 UIImageView 中显示的图像?
【发布时间】:2010-10-16 21:57:12
【问题描述】:

我有一个IBOutlet 到一个UIImageView,但是当我查看UIImageView 文档时,我看不到任何有关以编程方式更改它的提示。我是否必须从 UIImageView 中获取 UIImage 对象?

【问题讨论】:

    标签: ios uiimageview


    【解决方案1】:

    如果您已经有一个到 UIImageView 的 IBOutlet,那么您所要做的就是抓取一个图像并在接收器 (UIImageView) 上调用 setImage。下面是两个抓取图像的示例。一个来自网络,一个你添加到 Xcode 中的 Resources 文件夹中。

    UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://farm4.static.flickr.com/3092/2915896504_a88b69c9de.jpg"]]];
    

    UIImage *image = [UIImage imageNamed: @"cell.png"];
    

    一旦你有了一个图像,你就可以设置 UIImageView:

    [imageView setImage:image];
    

    以上行假设 imageView 是您的 IBOutlet。

    就是这样!如果您想变得花哨,可以将图像添加到 UIView,然后添加过渡。

    附:不包括内存管理。

    【讨论】:

    • 谢谢,但它不起作用:(我在界面生成器中删除了图像,所以 UIImageView 是空的。然后我在 viewDidLoad 方法中实现了这个。但什么也没发生。图像名称是 100% 正确的指定的。我还用 setImage 将它分配给了插座。还有什么我可以尝试的吗?
    • 您可能还没有将 IBOutlet 连接到 IB 中的 ViewController 引用。检查图像是否在 Resources 文件夹中。
    • 我不确定 necro 规则/对 SO 的影响,但我知道这帮助我解决了我的问题。我正在使用 iOS v5.1,xcode 4.3.2
    • 在更改图像之前调用检查 [UIViewController viewDidLoad]。我被它困住了。 8)
    • 添加到此解决方案中,如果您使用的是图像资产目录,只需指定图像集的名称,例如 UIImage *image = [UIImage imageNamed: @"My Icon"];而不是 UIImage *image = [UIImage imageNamed: @"myicon.png"];
    【解决方案2】:

    请注意,在将视图添加到场景之前,NIB 文件不会连接所有 IBOutlets。如果您要手动进行连接(如果事物位于单独的 NIB 中,您可能会这样做),请牢记这一点。

    因此,如果我的测试视图控制器有一个由 nib 连接的“imageView”,这可能不起作用:

      testCardViewController.imageView.image = [UIImage imageNamed:@"EmptyCard.png"];
      [self.view addSubview:testCardViewController.view];
    

    但这会:

      [self.view addSubview:testCardViewController.view];
      testCardViewController.imageView.image = [UIImage imageNamed:@"EmptyCard.png"];
    

    【讨论】:

      【解决方案3】:

      这对我有用

      [ImageViewName setImage:[UIImage imageNamed: @"ImageName.png"]];
      

      确保 ImageView 在 .h 文件中正确声明并与 IB 元素链接。

      【讨论】:

        【解决方案4】:
        imageView.image = [UIImage imageNamed:@"myImage.png"];
        

        【讨论】:

          【解决方案5】:

          对于那些可能正在谷歌搜索以尝试解决他们的问题的人,请记住在头文件中正确声明属性并在实现文件中合成 UIImageView...设置没有 getter 和 setter 方法的程序化图像。

          #import <UIKit/UIKit.h>
          
          @interface YOURCONTROLLERNAME : UIViewController {
              IBOutlet UIImageView *imageToDisplay;
          }
          
          @property (nonatomic, retain) IBOutlet UIImageView *imageToDisplay;
          
          @end
          

          然后在你的 .m 中:

          @implementation YOURCONTROLLERNAME
          
          @synthesize imageToDisplay;
          //etc, rest of code goes here
          

          从那里你应该可以使用类似下面的东西来设置你的图像。

          [YOURCONTROLLER.imageToDisplay setImage:[UIImage imageNamed:value]];
          

          【讨论】:

          • 谢谢!一般来说,作为 xcode 和 iphone 的新手,我在 imageToDisplay 之前错过了 YOURCONTROLLER。
          【解决方案6】:

          Swift 中的示例:

          import UIKit
          
          class ViewController: UIViewController {
          
              @IBOutlet var myUIImageView: UIImageView!
          
              override func viewDidLoad() {
                  super.viewDidLoad()
              }
          
              @IBAction func myAction(sender: UIButton) {
                  let newImg: UIImage? = UIImage(named: "profile-picture-name")
                  self.myUIImageView.image = newImg
              }
          
              @IBAction func myAction2(sender: UIButton) {
                  self.myUIImageView.image = nil
                  self.myUIImageView.image = UIImage(data: NSData(contentsOfURL: NSURL(string: "http://url/image.png")!)!)
              }
          
          }
          

          【讨论】:

            【解决方案7】:

            按照 Jordan 的建议(实际上应该可行),尝试将 UIImageView 设置为可见:

             [imageView setHidden: NO];
            

            还有 - 不要忘记将它附加到主 UIView:

            [mainView addSubview: imageView];
            

            并带到前面:

            [mainView bringSubviewToFront: imageView];
            

            希望结合所有这些步骤将帮助您解开谜团。

            【讨论】:

              【解决方案8】:

              我的问题是我试图在另一个线程中更改图像。我确实喜欢这样:

              - (void)changeImage {
                  backgroundImage.image = [UIImage imageNamed:@"img.png"];
              }
              

              致电:

              [self performSelectorOnMainThread : @selector(changeImage) withObject:nil waitUntilDone:NO];
              

              【讨论】:

              • 是的,这个咬我……再一次……也可以使用dispatch_async(dispatch_get_main_queue(), ^{backgroundImage.image = [UIImage imageNamed:@"img.png"];})
              【解决方案9】:

              如果您想以编程方式将图像设置为UIImageView,请不要忘记将UIImageView 作为SubView 添加到主视图。

              别忘了设置ImageView Frame

              这里是代码

              UIImageView *myImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
              
              myImage.image = [UIImage imageNamed:@"myImage.png"];
              
              [self.view addSubview:myImage];
              

              【讨论】:

                【解决方案10】:

                如果您使用 UIImageView 的大小来设置 UIScrollView contentSize 和/或计算缩放比例,请不要忘记在更改图像后调用sizeToFit()

                let image = UIImage(named: "testImage")
                imageView.image = image
                imageView.sizeToFit()
                scrollView.contentSize = imageView.bounds.size
                

                【讨论】:

                  【解决方案11】:
                  myUIImageview.image = UIImage (named:"myImage.png")
                  

                  【讨论】:

                  • 标记为质量非常低。请改进它。
                  • 你可以通过扩展它来做到这一点。
                  【解决方案12】:

                  使用 Swift 5 (XCode 10.3) 只是

                  yourImageView.image = UIImage(named: "nameOfTheImage")
                  

                  【讨论】:

                    【解决方案13】:
                    UIColor * background = [[UIColor alloc] initWithPatternImage:
                        [UIImage imageNamed:@"anImage.png"]];
                    
                    self.view.backgroundColor = background;
                    [background release];
                    

                    【讨论】:

                    • UIView的背景呈现图片还是UIImageView的image属性呈现图片是一样的吗?
                    【解决方案14】:

                    这个问题已经有很多答案了。不幸的是,没有一个对我有用。 因此,为了完整起见,我添加了对我有帮助的内容:

                    我有多个具有相同名称的图像 - 所以我将它们放在子文件夹中。我有我想要显示的图像文件的完整路径。使用完整路径 imageNamed: (如上述所有解决方案中所使用的)不起作用并且是错误的方法。

                    相反,我现在像这样使用imageWithContentsOfFile:

                    self.myUIImage.image = [UIImage imageWithContentsOfFile:_currentWord.imageFileName];
                    

                    不知道有没有人读到这么远?

                    如果是这样,并且这个对您有帮助:请投票。 ;-)

                    【讨论】:

                      【解决方案15】:

                      要在您的 imageView 上设置图像,请使用以下代码行,

                      self.imgObj.image=[UIImage imageNamed:@"yourImage.png"];                         
                      

                      【讨论】:

                      • 复制图片到你的项目中,然后使用上面的代码
                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 2015-08-15
                      • 1970-01-01
                      • 2011-01-11
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-04-18
                      • 1970-01-01
                      相关资源
                      最近更新 更多