首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIImageview和TouchesEnded事件

UIImageview和TouchesEnded事件
EN

Stack Overflow用户
提问于 2011-12-04 15:27:30
回答 1查看 624关注 0票数 0

我正在尝试写一个简单的程序,采取5个图像,并允许您从屏幕底部拖动它们,并捕捉到顶部的其他5个图像在任何你喜欢的顺序。我已经用一个新的类对UIImageView进行了子类化,并添加了触摸开始,触摸移动和触摸结束。然后,在我的主视图控制器上,我放置图像,并将它们的类设置为我创建的新子类。这个动作做得很好,实际上我是在NSLogging类中的坐标。

问题是,我正在尝试弄清楚如何从自定义类的触摸端获得CGpoint信息,并让它调用我的主视图控制器中的一个函数,该函数包含图像对象,以便我可以测试图像是否在另一个图像上。并将其移动到它所在的图像的中心(捕捉到它上)。

下面是我的自定义类m文件中的代码。我的视图控制器基本上是空的,有一个包含10个图像视图的xib文件,其中5个被设置为此类,5个是普通图像视图。

代码语言:javascript
复制
#import "MoveImage.h"


CGPoint EndPoint;

@implementation MoveImage


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    startPoint = [[touches anyObject] locationInView:self];
    }

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    CGPoint newPoint = [[touches anyObject] locationInView:self.superview];

    newPoint.x -= startPoint.x; 
    newPoint.y -= startPoint.y;
    CGRect frm = [self frame];
    frm.origin = newPoint;
    [self setFrame:frm]; 
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *end = [[event allTouches] anyObject];
    EndPoint = [end locationInView:self];
    NSLog(@"end ponts x : %f y : %f", EndPoint.x, EndPoint.y);

} 

@end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-04 15:33:32

您可以编写一个MoveImageDelegate协议,然后您的应用程序控制器将实现该协议。该协议将具有您的MoveImage类可以调用以获取其信息的方法。

在您的头文件中(如果您不知道如何编写协议)

代码语言:javascript
复制
@protocol MoveImageDelegate <TypeOfObjectsThatCanImplementIt> // usually NSObject
// methods
@end

然后,您可以声明一个id类型的实例变量,但仍然让编译器识别该变量对您的委托选择器的响应(这样您就可以编写代码,而不会出现那些恼人的警告)。类似于:

代码语言:javascript
复制
@interface MoveImage : UIImageView
{
 id <MoveImageDelegate> _delegate;
}

@property (assign) id <MoveImageDelegate> delegate;

最后:

代码语言:javascript
复制
@implementation MoveImage

@synthesize delegate = _delegate;

你的委派就完成了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8373940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档