0

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

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

任何帮助表示赞赏

@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
4

2 回答 2

1

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

解决此问题的一种方法是使用 UIScrollView 的实现delegatesetDelegate:存储您的委托,而不是使用您自己的 ivar。另一种方法是重命名您的财产以避免冲突。第三个是让滚动视图内的视图响应触摸,而不是弄乱滚动视图本身。

于 2011-04-04T01:27:58.733 回答
0

为什么不让 imageView 处理触摸呢?

于 2011-06-04T07:46:52.337 回答