如何在UIScrollView中实现一个可拖动的UIView子类?
问题描述:
我有一个相当棘手的滚动scenerio我需要排序。我有一个父级UIScrollView与单个容器视图包含两个子UIView子类。称它们为viewA和viewB。 UIScrollView被限制为水平滚动/缩放。 ViewA和ViewB被排列成水平条,一个在另一个之上。 viewA和viewB的范围超出了scrollView的范围,并且在滚动/缩放过程中正常显示。到现在为止还挺好。如何在UIScrollView中实现一个可拖动的UIView子类?
这里是事情有点棘手的地方:我需要能够垂直拖动viewB和水平。我宁愿不将viewB嵌套在它自己的scrollView中。
我的问题是,什么是正确的方式来实现简单的垂直滚动viewB同时仍然有关于scrollView的行为正确吗?我是否简单地实现了四种触摸顺序方法:在viewB中开始/移动/结束/取消,操作viewB的变换矩阵,并且我处于清晰状态还是对它更感兴趣?
在此先感谢。
干杯, 道格
答
嗯,关于你的给定的场景,我会解决这个问题如下:
首先创建一个UIView子类,包括nessecary功能,这个人是在收到您的阻力-actions。虽然这是可拖动的,但应该禁用UIScrollView的滚动。 标题:
#import <UIKit/UIKit.h>;
@interface ViewB : UIView
{
}
@end
实现:
#import "ViewB.h"
@implementation DragView
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
self.alpha = 0.5;
((UIScrollView*)self.superview.superview).scrollEnabled = NO;
}
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint loc = [touch locationInView:self.superview];
self.center = loc;
}
- (void) touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
self.alpha = 1.0;
((UIScrollView*)self.superview.superview).scrollEnabled = YES;
}
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
self.alpha = 1.0;
((UIScrollView*)self.superview.superview).scrollEnabled = YES;
}
// Further methods...
@end
为什么你不希望ViewB是在其自身的滚动视图? – NSResponder 2009-10-26 21:58:59
总之:复杂性。一个scrollView是为我的需要矫枉过正。 – dugla 2009-10-27 17:39:21