【问题标题】:Changing a UIImageView image with a slider使用滑块更改 UIImageView 图像
【发布时间】:2010-10-29 13:26:53
【问题描述】:

我有一个带有一个 UIImageView 和一个滑块的视图。 Slider Min 1 Max 10. 当滑块移动时 UIImageView 应该显示不同的图像。滑块为 1 将显示 test1.png,滑块为 2 将显示 test2.png,滑块为 3 将显示 test3.png 等等...

在 Interface Builder 中,我已将 IBOutlet 滑块连接到水平滑块,将 IBOutlet 图像连接到图像视图,并将 IBAction changeImage 连接到水平滑块“值已更改”

我已将滑块浮动转换为 int。在 IBAction changeImage 中放置了一个 NSLog 语句,以确保方法被调用,它是。我在构建时没有收到错误消息。但是,当我在 UIImageView 中的模拟器图像中构建并运行和移动滑块时不会改变。问题一定是“逻辑”我碰壁了,想不通。

#import <UIKit/UIKit.h>

@interface SliderViewController : UIViewController {

    IBOutlet UISlider *slider;
    IBOutlet UIImageView *image;

}

@property (nonatomic, retain) IBOutlet UISlider *slider;

@property (nonatomic, retain) IBOutlet UIImageView *image;

- (IBAction)changeImage;

@end



#import "SliderViewController.h"

@implementation SliderViewController


@synthesize slider;
@synthesize image;


- (IBAction)changeImage {

    NSLog(@"changeImage method being called!!!!");

    int intSlider = (int)(slider.value);


    if (intSlider == 0) {


                image.image = [UIImage imageNamed:@"ash1.png"];
    }

    if (intSlider == 1) {


        image.image = [UIImage imageNamed:@"ash2.png"];
    }

    if (intSlider == 2) {


        image.image = [UIImage imageNamed:@"ash3.png"];
    }

    if (intSlider == 3) {


        image.image = [UIImage imageNamed:@"ash4.png"];
    }

    if (intSlider == 4) {


        image.image = [UIImage imageNamed:@"ash5.png"];
    }

    if (intSlider == 5) {


        image.image = [UIImage imageNamed:@"ash6.png"];
    }

    if (intSlider == 6) {


        image.image = [UIImage imageNamed:@"ash7.png"];
    }

    if (intSlider == 7) {


        image.image = [UIImage imageNamed:@"ash8.png"];
    }

    if (intSlider == 8) {


        image.image = [UIImage imageNamed:@"ash9.png"];
    }

    if (intSlider == 9) {


        image.image = [UIImage imageNamed:@"ash10.png"];
    }

    if (intSlider == 10) {


        image.image = [UIImage imageNamed:@"ash11.png"];
    }

}

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    确保图像名称完全正确,并且您实际上已将它们添加到项目中(而不仅仅是使用 Finder 复制它们)。

    顺便说一句,switch-case 语句比这里的一系列if-then 语句要好。

    另一个小问题是if (intSlider == 0) 的情况永远不会发生,因为您将最小值设置为 1。

    【讨论】:

      【解决方案2】:

      根据论坛的说法,一种方法是尝试调用 setNeedsDisplay 来刷新视图:

      myApp = (MyApp *)[[UIApplication sharedApplication] delegate];
      [myApp.statView setNeedsDisplay];
      

      我敢肯定,从你的角度来看,你可以将其称为“自我”。

      [self.view setNeedsDisplay];
      

      根据this post,调用也必须在应用程序的主线程中。不确定这是否可行,但值得一试。

      【讨论】:

        【解决方案3】:

        在目标 c 中使用带值的滑块更改图像

        .h

        @interface ViewController : UIViewController
        @property (weak, nonatomic) IBOutlet UIImageView *imageview;
        
        @property (weak, nonatomic) IBOutlet UISlider *sldrimg;
        
        
        - (IBAction)slider:(id)sender;
        

        .m

        - (IBAction)slider:(id)sender {
        
            int a = (int) self.sldrimg.value;
            if(a<=20)
            {
                _imageview.image = [UIImage imageNamed:@"nature.png"];
            }
        
        
            if(a>20 && a<=40)
            {
                _imageview.image = [UIImage imageNamed:@"bike.png"];
            }
        
        
            if(a>40 && a<=60)
            {
                _imageview.image = [UIImage imageNamed:@"minion.png"];
            }
        
        
            if(a>60 && a<=80)
            {
                _imageview.image = [UIImage imageNamed:@"woods.png"];
            }
        
        
            if(a>80 && a<=100)
            {
                _imageview.image = [UIImage imageNamed:@"trees.png"];
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-20
          • 1970-01-01
          • 2021-05-07
          相关资源
          最近更新 更多