处理UIScrollview中的触摸

时间:2012-08-27 16:39:49

标签: ios xcode uiscrollview scrollview

我有一个包含UIScrollView的视图。 UIScrollView包含一个UIImageView(现在只有一个,但后面会有更多)。我希望能够将UIImageView拖出UIScrollView并进入superview。

我已经回顾了我可以在网上找到的每个类似的问题和例子,但仍然无法理解这是如何工作的。

起初我无法接触到在滚动视图中注册所有内容。经过大量的搜索后,我找到了一种方法来触摸如下注册:

首先,我在自动创建的“ViewController.h”中创建了一个基于视图的新项目 我创建了一个名为slider的IBOutlet。

然后在自动创建的“ViewController.m”中创建了UIScrollview。

在IB中,我在故事板中添加了一个UIScrollView,然后将其连接到“滑块”IBOutlet。

接下来,我将类文件添加到项目中。这个新类是一个子类os UIImageView。我在

中将此类命名为“DragableImage”

然后在IB中我将一个图像放入点击它的UIScrollview并将类更改为“DragableImage”

在DragableImage.m中,我开始取消触摸,并简单地告诉它如果被点击则隐藏。

这可以工作,触摸注册并使图像消失,但我现在如何将新图像添加到主视图并让它跟随我的手指?

这就是我对代码的看法:

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController {

    IBOutlet UIScrollView *slider;
}

@end

ViewController.m

#import "ViewController.h"


@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [slider setScrollEnabled:YES];
    [slider setContentSize:CGSizeMake(306, 1560)];
    [slider setShowsVerticalScrollIndicator:NO];
    slider.canCancelContentTouches = NO; 
    slider.delaysContentTouches = NO;

    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

@end

DragableImage.h

#import <UIKit/UIKit.h>

@interface DragableImage : UIImageView

@end

DragableImage.m

@implementation DragableImage

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    self.hidden = YES;
}

@end

如何使这项工作?

1 个答案:

答案 0 :(得分:0)

这里可能会出现一个明显的问题。即,如何区分拖动滚动和拖动图像之间的区别。我处理这个问题的方法是设置一个点按并保持手势识别器(http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/GestureRecognizers/GestureRecognizers.html)。

一旦检测到保持,您就可以设置它,以便进一步触摸/手势路由到拖放代码。你可以在这里找到一个很好的教程: http://www.ancientprogramming.com/2012/04/05/drag-and-drop-between-multiple-uiviews-in-ios/