【问题标题】:Xcode: How to change Image on Touching at an Image (same Position)?Xcode:如何在触摸图像(相同位置)时更改图像?
【发布时间】:2011-01-26 19:01:45
【问题描述】:

简单地说,我已经在 UIView 中放置了带有 Interface Builder 的图像。现在我想在触摸该图像时运行一个方法/函数,例如在应该加载另一个图像时。

我的代码:

- (void)touchesended:(NSSet*) touches withEvent:(UIEvent *)event 
{
    // UITouch *touch = [touch anyObject];
    bild_1_1.image = [UIImage imageNamed:@"t_1_4.jpg"];
}

【问题讨论】:

    标签: objective-c iphone xcode uiimage touch


    【解决方案1】:

    您需要处理来自 UIView 的触摸事件。为此,您应该创建 UIView 的子类并添加 touchesBegan:withEvent: 方法的实现,这里是最简单的示例:

    //  TouchSimpleView.h
    @interface TouchSimpleView : UIImageView {
        id  delegate;
    }
    @property(retain) id delegate;
    @end
    
    @interface NSObject(TouchSimpleView)
    -(void)didTouchView:(UIView *)aView;
    @end 
    
    //  TouchSimpleView.m
    #import "TouchSimpleView.h"
    @implementation TouchSimpleView
    @synthesize delegate;
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        NSLog(@"touchesBegan!!! ");
        if ( delegate != nil && [delegate respondsToSelector:@selector(didTouchView:)] ) {
            [delegate didTouchView:self];
        } 
        [super touchesBegan:touches withEvent:event];
    }
    @end
    

    然后你可以在你想处理触摸的时候使用这个类的视图,例如:

    - (void)applicationDidFinishLaunching:(UIApplication *)application {    
        [window makeKeyAndVisible];
        touchView = [[TouchSimpleView alloc] initWithFrame:CGRectMake(50, 50, 200, 300)];
        touchView.delegate = self;
        [window addSubview:touchView];
    
        imageView =[[UIImageView alloc] initWithFrame:touchView.frame];
        imageView.image = [UIImage imageNamed:@"image1.png"];
        [touchView addSubview:imageView];
    }
    
    -(void)didTouchView:(UIView *)aView{
        NSLog(@"view touched, changing image");
        imageView.image = [UIImage imageNamed:@"image2.png"];
    }
    

    【讨论】:

    • 我必须声明 touchView 还是必须粘贴除 [window...] 之外的所有内容;在 (void)applicationDidFin.... 函数中?
    • 在上面的代码中,应该在 h 文件中声明了 touchView 和 imageView: //MyAppDelegate.h @interface MyAppDelegate : NSObject { UIWindow *window; UIImageView *imageView; TouchSimpleView *touchView; //... 请注意,您可以在任何情况下使用 TouchSimpleView 对象,而不仅仅是在应用程序委托中。另请注意,您可以创建其他委托方法,例如发送触摸坐标,或不仅处理 touchesBegan... 还处理 touchesMoved 或 touchesCanceled 事件。
    【解决方案2】:

    您可以通过放置 UIButton 而不是 UIImage 并使用方法 setBackgroundImage:forState: 在 TouchUpInside 事件处理程序更改其背景图像来轻松完成。

    【讨论】:

    • 感谢第一个回答!但是按钮不适用于我计划的步骤。
    【解决方案3】:

    另一种解决方案:

    在 .h 文件中

    放置一个 IBOutlet UIImagView *imageButton;

    -(IBAction)doSomething:(id)sender;
    

    在 .m 文件中

    -(IBAction)dosomething:(id)sender {
    
        // your code
    
       [imageButton setImage:[UIImage imageNamed:@""t_1_4.jpg"} forState:UIControlStateNormal];
    }
    

    在我的代码中工作得很好

    【讨论】:

      【解决方案4】:

      它无需创建子类即可与我一起使用,在 .h 文件中添加 UIImageView

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

      然后在 .m 中你可以使用你的方法

      - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
          [wallpaper setImage:[UIImage imageNamed: @"image.png"]];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多