iOS处理屏幕上的触摸动作,主要涉及到以下几个方法:
touchesBegan:withEvent: //触摸屏幕的最开始被调用
touchesMoved:withEvent: //移动过程中被调用
touchesEnded:withEvent: //动作结束时被调用
touchesCancelled:WithEvent:
从方法的命名可以清晰的看出该方法何时被调用,最后一个比较特殊。touchesCancelled:WithEvent:在Cocoa touch必须响应持续触摸事件的系统中断时调用。
我们只要重写这些方法,来作我们想要作的事情就可以了。
备注:分别限制x坐标与y坐标的原因是,即使向右拖动不了了,仍需保证可以向下拖动。
实现代码 以子类化UIImageVIEw为例
#import <UIKit/UIKit.h>@interface GragVIEw : UIImageVIEw{ CGPoint startPoint;}@end
#import "GragVIEw.h"@implementation GragVIEw- (ID)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { // Initialization code //允许用户交互 self.userInteractionEnabled = YES; } return self;}- (ID)initWithImage:(UIImage *)image{ self = [super initWithImage:image]; if (self) { //允许用户交互 self.userInteractionEnabled = YES; } return self;}- (voID) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ //保存触摸起始点位置 CGPoint point = [[touches anyObject] locationInVIEw:self]; startPoint = point; //该vIEw置于最前 [[self supervIEw] bringSubvIEwToFront:self];}-(voID) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ //计算位移=当前位置-起始位置 CGPoint point = [[touches anyObject] locationInVIEw:self]; float dx = point.x - startPoint.x; float dy = point.y - startPoint.y; //计算移动后的vIEw中心点 CGPoint newcenter = CGPointMake(self.center.x + dx,self.center.y + dy); /* 限制用户不可将视图托出屏幕 */ float halfx = CGRectGetMIDX(self.bounds); //x坐标左边界 newcenter.x = MAX(halfx,newcenter.x); //x坐标右边界 newcenter.x = MIN(self.supervIEw.bounds.size.wIDth - halfx,newcenter.x); //y坐标同理 float halfy = CGRectGetMIDY(self.bounds); newcenter.y = MAX(halfy,newcenter.y); newcenter.y = MIN(self.supervIEw.bounds.size.height - halfy,newcenter.y); //移动vIEw self.center = newcenter;}/*// Only overrIDe drawRect: if you perform custom drawing.// An empty implementation adversely affects performance during animation.- (voID)drawRect:(CGRect)rect{ // Drawing code}*/@end
效果图 总结
以上是内存溢出为你收集整理的iOS开发入门之——拖动视图全部内容,希望文章能够帮你解决iOS开发入门之——拖动视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)