子类化UIScrollView / UIScrollViewDelegate

时间:2011-04-04 00:40:11

标签: iphone objective-c uiscrollview uiscrollviewdelegate

我正在尝试创建自己的自定义UIScrollView,以便我可以将触摸事件从它传递给委托对象,该委托对象具有在scrollview内部绘制到imageview的逻辑。

如果我从类接口中删除委托变量和属性,它可以正常滚动视图。当我创建自定义协议委托时,它会构建但不会传递消息..

任何帮助表示赞赏

@class DrawableScrollView;

@protocol DrawableScrollViewDelegate <UIScrollViewDelegate>

- (void)touchesBegan:(DrawableScrollView *)drawableScrollView touches:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(DrawableScrollView *)drawableScrollView touches:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(DrawableScrollView *)drawableScrollView touches:(NSSet *)touches withEvent:(UIEvent *)event;

@end

@interface DrawableScrollView : UIScrollView {

    id<DrawableScrollViewDelegate> delegate;

}

@property (nonatomic, assign) IBOutlet id<DrawableScrollViewDelegate> delegate;

@end

2 个答案:

答案 0 :(得分:1)

传递委托消息的UIScrollView方法可能使用(私有)ivar来访问委托,而不是每次都使用属性访问器。因此,当您使用自己的委托属性覆盖它们时,底层的scrollview委托永远不会被设置。

解决这个问题的一种方法是使用UIScrollView的delegatesetDelegate:实现来存储您的代理,而不是使用您自己的ivar。另一种方法是重命名您的财产以避免冲突。第三种方法是使scrollview中的视图响应触摸,而不是弄乱scrollview本身。

答案 1 :(得分:0)

为什么不让imageView处理触摸?