iOS拖放到具有子类的另一个视图

我有一个带有UIScrollView(boardScrollView)的RootViewController。 这有一个UIImageView作为子视图来创build一个板(boardImage)。 我可以放大和缩小,工作正常。 也滚动工作正常!
现在,我想拖放其他UIImageViews(Tiles)进出ScrollView。

我已经将UIImageView分类为TileImageView,并将方法touchesBegan,touchesMoved和touchesEnded重写。 拖放工作正常在超视图。 但是我希望能够在RootViewController上的一个IBOutlet的ScrollView上放置Tiles。

我可以拖放瓦片,因为我可以使用superview但是我不知道如何将瓦片添加到boardScrollView。

任何人都知道如何从子类访问RootViewController上的对象?
我应该委托一些东西? 或者设置不同的参数?

代码RootViewController:

 @implementation RootViewController_iphone @synthesize boardScrollView; @synthesize dragObject; @synthesize boardImage; - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. self.boardScrollView.clipsToBounds = YES; UIImage *image = [UIImage imageNamed:@"greyblue_numbered_15x15_900x900.png"]; self.boardImage = [[UIImageView alloc] initWithImage:image]; self.boardImage.frame = (CGRect){.origin=CGPointMake(0.0f, 0.0f), .size=image.size}; [self.boardScrollView addSubview:self.boardImage]; self.boardImage.userInteractionEnabled = YES; self.boardScrollView.contentSize = image.size; self.boardScrollView.userInteractionEnabled = YES; self.boardScrollView.canCancelContentTouches = NO; } 

代码子类TileImageView.h:

 #import <UIKit/UIKit.h> @interface TileImageView : UIImageView @property (nonatomic, strong) UIImageView *dragObject; @property (nonatomic, assign) CGPoint touchOffset; @end 

代码子类TileImageView.m:

 #import "TileImageView.h" @implementation TileImageView @synthesize dragObject; @synthesize touchOffset; - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Initialization code self.exclusiveTouch = YES; self.userInteractionEnabled = YES; } return self; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if ([touches count] == 1) { // one finger CGPoint touchPoint = [[touches anyObject] locationInView:self.superview]; // for now, I use the superview, but to be able to drag from the ScrollView, I need to access the boardScrollView on the UIViewController... // ie CGPoint touchPoint = [[touches anyObject] locationInView:self.boardScrollView]; for (UIImageView *iView in self.superview.subviews) { if ([iView isMemberOfClass:[TileImageView class]]) { if (touchPoint.x > iView.frame.origin.x && touchPoint.x < iView.frame.origin.x + iView.frame.size.width && touchPoint.y > iView.frame.origin.y && touchPoint.y < iView.frame.origin.y + iView.frame.size.height) { self.dragObject = iView; self.touchOffset = CGPointMake(touchPoint.x - iView.frame.origin.x, touchPoint.y - iView.frame.origin.y); [self.superview bringSubviewToFront:self.dragObject]; } } } } } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { CGPoint touchPoint = [[touches anyObject] locationInView:self.superview]; // here I use the superview, but I also want to use the ScrollView CGRect newDragObjectFrame = CGRectMake(touchPoint.x - touchOffset.x, touchPoint.y - touchOffset.y, self.dragObject.frame.size.width, self.dragObject.frame.size.height); self.dragObject.frame = newDragObjectFrame; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { // here I need to be able to use the ScrollView on the RootViewController.... } 

我可以通过在子视图上循环来将图块添加到ScrollView。

 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"Ended Tile!"); for (UIView *iView in self.superview.subviews) { NSLog(@"superview.subviews"); if ([iView isMemberOfClass:[UIScrollView class]]) { CGPoint touchPointScreen = [[touches anyObject] locationInView:self.superview]; CGPoint touchPointBoard = [[touches anyObject] locationInView:iView]; if (touchPointScreen.x > iView.frame.origin.x && touchPointScreen.x < iView.frame.origin.x + iView.frame.size.width && touchPointScreen.y > iView.frame.origin.y && touchPointScreen.y < iView.frame.origin.y + iView.frame.size.height) { for (UIView *iView2 in iView.subviews) { [iView2 addSubview:self.dragObject]; CGPoint touchPointImage = [[touches anyObject] locationInView:iView2]; self.dragObject.frame = CGRectMake(touchPointImage.x - touchOffset.x, touchPointImage.y - touchOffset.y, self.dragObject.frame.size.width, self.dragObject.frame.size.height); } } self.dragObject = nil; } } }