iphone – 无法使用UIPanGestureRecognizer移动UIImageView

iphone – 无法使用UIPanGestureRecognizer移动UIImageView,第1张

概述我正在尝试创建一个程序,用户可以使用UIPanGestureRecognizer在屏幕上拖动UI ImageView.我尝试了几种不同的方法,但无法弄明白.我不确定是否需要创建发件人/请求者.我的理解是UIImageView需要放在一个可以处理手势的UIView中.在我的程序中,我有一个视图控制器 – AdvancedViewController1.我创建了一个名为AdvancedView1的UI 我正在尝试创建一个程序,用户可以使用UIPanGestureRecognizer在屏幕上拖动UI ImageVIEw.我尝试了几种不同的方法,但无法弄明白.我不确定是否需要创建发件人/请求者.我的理解是UIImageVIEw需要放在一个可以处理手势的UIVIEw中.在我的程序中,我有一个视图控制器 – AdvancedVIEwController1.我创建了一个名为AdvancedVIEw1的UIVIEw.在界面生成器中,我已将AdvancedVIEw1插入到AdvancedVIEwController 1中.以下是控制器和视图的.h和.m文件.我只包含了相关的代码.如果我很接近,请告诉我,以及如何修复我的代码.在此先感谢您的帮助.

AdvancedVIEwController1.h#import <UIKit/UIKit.h>#import "AdvancedVIEw1.h"@interface AdvancedVIEwController1 : UIVIEwController {UIWindow *window;AdvancedVIEw1 *advancedVIEw1;UIImageVIEw * option1; }@property (retain) IBOutlet AdvancedVIEw1 *advancedVIEw1;@property (retain) IBOutlet UIImageVIEw *option1;@end

在IB中,我已将IBOutlet与AdvancedVIEw1链接到UIVIEw,并将选项1链接到我希望能够移动的UIImageVIEw.

AdvancedVIEwController.m#import "AdvancedVIEwController1.h"#import "AdvancedVIEw1.h"@implementation AdvancedVIEwController1@synthesize advancedVIEw1;@synthesize option1- (voID)vIEwDIDLoad { UIGestureRecognizer *pangr = [[UIPanGestureRecognizer alloc]       initWithTarget:self.advancedVIEw1 action:@selector(pan:)];pangr.delegate = self;[self.advancedVIEw1 addGestureRecognizer:pangr];[pangr release];      [super vIEwDIDLoad];}AdvancedVIEw1.h#import <UIKit/UIKit.h>#import "AdvancedVIEwController1.h"@class AdvancedVIEw1;@interface AdvancedVIEw1 : UIVIEw{CGPoint* origin;}@property (nonatomic)  CGPoint* origin;@endAdvancedVIEw1.m#import "AdvancedVIEw1.h"#import "AdvancedVIEwController1.h"@implementation AdvancedVIEw1;@synthesize origin;- (voID)pan:(UIPanGestureRecognizer *) gesture{if ((gesture.state == UIGestureRecognizerStateChanged) ||(gesture.state == UIGestureRecognizerStateEnded)) {CGPoint translation = [gesture translationInVIEw:self];gesture.origin = CGPointMake(gesture.origin.x+translation.x,gesture.origin.y+translation.y);[gesture setTranslation:CGPointZero inVIEw:self];}
解决方法 你必须在你的pan:selector中实际设置UIVIEw的位置.而且由于您在AdvancedVIEw类中而不是在其外部执行此 *** 作,因此必须获取视图的父视图([self supervIEw]),因为更新位置是相对于父(包含)视图.试试这个:

- (voID)pan:(UIPanGestureRecognizer *)gesture{  if ((gesture.state == UIGestureRecognizerStateChanged) ||      (gesture.state == UIGestureRecognizerStateEnded)) {    CGPoint location = [gesture locationInVIEw:[self supervIEw]];    [self setCenter:location];  }}

请记住,您需要确保子类视图允许用户交互或手势识别器不起作用.在初始化视图时,只需使用[self setUserInteractionEnabled:YES]将其打开.

总结

以上是内存溢出为你收集整理的iphone – 无法使用UIPanGestureRecognizer移动UIImageView全部内容,希望文章能够帮你解决iphone – 无法使用UIPanGestureRecognizer移动UIImageView所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存