iOS开发入门之——拖动视图

iOS开发入门之——拖动视图,第1张

概述预备知识 iOS处理屏幕上的触摸动作,主要涉及到以下几个方法: touchesBegan:withEvent:          //触摸屏幕的最开始被调用 touchesMoved:withEvent:         //移动过程中被调用 touchesEnded:withEvent:         //动作结束时被调用 touchesCancelled:WithEvent: 从方法的命名可 预备知识

iOS处理屏幕上的触摸动作,主要涉及到以下几个方法:

touchesBegan:withEvent:          //触摸屏幕的最开始被调用

touchesMoved:withEvent:         //移动过程中被调用

touchesEnded:withEvent:         //动作结束时被调用

touchesCancelled:WithEvent:

从方法的命名可以清晰的看出该方法何时被调用,最后一个比较特殊。touchesCancelled:WithEvent:Cocoa touch必须响应持续触摸事件的系统中断时调用。

我们只要重写这些方法,来作我们想要作的事情就可以了。


如何实现拖动视图? 1.设置userInteractionEnabled属性为YES,允许用户交互。 2.在触摸动作开始时记录起始点。 3.在移动过程中,计算当前位置坐标与起始点的差值,即偏移量,并且移动视图中心点至偏移量大小的地方。 4.分别限制x坐标、与y坐标,保证用户不可将视图托出屏幕
备注:分别限制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开发入门之——拖动视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1061238.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存