广告和事件

时间:2012-06-19 20:15:52

标签: iphone objective-c ios5 uiscrollview uiimageview

所以我有一个UIScrollView多个UIImageViews 我必须生成我自己的滚动视图类才能使用它touchesEnded

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
//    [super touchesEnded:touches withEvent:event];

    UITouch  *touch = [touches anyObject];
    CGPoint   point = [touch locationInView:self];

    if ((int)(point.x / 100) < [[self items] count] ) {
        NSLog(@" ENDED  D    File Selected is   %@     %d   " , [[self items]  objectAtIndex:(int)(point.x / 100) ]   ,  (int)(point.x / 100)   );
    }
//    [[self nextResponder] touchesEnded:touches withEvent:event];
}

项目是NSMutableArray,我在其中存储每个子视图指向的文件的名称,所以基本上subview[0] === item[0]等...

subview[0]是图片视图,item[0]是该图片的fileName

我的问题是,我现在如何“广告”警告原始来电者选择了xyz文件?与NSLog行相反?

提前致谢

1 个答案:

答案 0 :(得分:0)

“原始来电者”是什么意思? -touchesEnded:withEvent:由框架事件处理子系统调用。

你可能会做什么(但不要!见下文)是添加一些你自己的委托方法给现有的委托(显然已经有UIScrollViewDelegate协议和相应的-[UIScrollView delegate]属性)并调用您定义的代理方法代替您的NSLog()。我在recent answer中讨论了这样做的答案。

然而,这一切都没有实际意义,因为你真正接近这个并为自己创造了许多不必要的工作。我将在前言中说,有些类子类应该是一个触发器,你需要重新考虑你的设计。而UIScrollView就是这样一个类。

您已经承认自己拥有UIImageView个对象的集合。您应该让他们处理互动。一般的想法是:

1)向每个实例发送类似[imageView setUserInteractionEnabled:YES];的内容。在处理交互式图像视图时,这是最常被忽视的错误。

2)为每个图像视图添加适当的具体UIGestureRecognizer实例,并实现手势识别器回调。除非您绝对必须支持古老的iOS版本,否则 总是 尝试使用手势识别器代替显式触摸处理。

3)在手势识别器回调中,添加基于发送手势识别器-view采取适当操作的逻辑代码。 (例如,您可以检查相应的视图-image-frame并使用该信息来决定触摸了哪个图像。)

由于手势识别器回调可能会在您的视图控制器中,因此可以更轻松地“与”代码的其余部分进行“对话”。