再次触摸 UIImageView 时如何撤消先前触摸的操作以及如何进行预览?

Posted

技术标签:

【中文标题】再次触摸 UIImageView 时如何撤消先前触摸的操作以及如何进行预览?【英文标题】:How to undo the actions of previous touch on UIImageView when touch it again and also how to give preview? 【发布时间】:2011-06-03 19:19:02 【问题描述】:

我的问题实际上很简单,但为了更好地理解,我在这里解释了一切。

我在 UIScrollView 中有一系列 UIImageView,还有另一个大 UIImageView

我的代码是这样的

- (void)viewDidLoad    

    imgScrollView.clipsToBounds = YES;      
    imgScrollView.scrollEnabled = YES;
    imgScrollView.userInteractionEnabled =YES;

    // load all the images 
    NSUInteger i;
    for (i = 1; i <= 9; i++)
    
        NSString *imageName = [NSString stringWithFormat:@"image%d.jpg", i];

        CGRect imageViewFrame = CGRectMake(0.0f, 0.0f, kHeight, kWidth);

        // TapImage is a subclassed UIImageView that catch touch/tap events 
        TapImage *imageView = [[[TapImage alloc] initWithFrame:imageViewFrame] autorelease];
        imageView.userInteractionEnabled = YES;
        imageView.image = [UIImage imageNamed:imageName];
        imageView.tag = i;  

        [self.imgScrollView addSubview:imageView];
        [imageView release];
    

    [self layoutImages];
    [super viewDidLoad];

TapImage 是 UIImageView 的子类。代码是这样的

 @interface TapImage : UIImageView 
 
 @end


 @implementation TapImage
 - (id)initWithFrame:(CGRect)aRect 
     if (self = [super initWithFrame:aRect]) 
         self.userInteractionEnabled = YES;
     
     return self;
 

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event      
     [self.layer setBorderColor: [[UIColor greenColor] CGColor]];
     [self.layer setBorderWidth: 2.0];

     NSLog(@"Touches began %@",touches);    
 

    当触摸滚动视图中的一个图像时,我想在大 UIImageView 中进行预览(就像 Windows 操作系统中的“电影条视图”功能)。但问题是,无法从 TapImage 类访问 bigPreview UIImageView,因为它不是 TapImage 类的一部分。那么这里的解决方案是什么??

    当在滚动视图中触摸一个图像时,它会得到一个绿色边框(表示被选中)。在这里,我想在我们触摸滚动视图中的另一个图像时取消选择先前触摸的图像(意味着一次只有一个图像被选中和预览)。但问题是,当触摸它时,每个 UIImageView 都会调用自己的 touchesBegan: 方法。那么如何取消选择之前触摸的图像呢??

请帮助我一些简单而详细的答案。 :-) 提前谢谢。 :-)

【问题讨论】:

听起来像是委托的主要候选人。添加一个协议并委托给 TapImage 类,该类调用控制器上的一个方法来表示 TapImage 已被触摸。 developer.apple.com/library/ios/#documentation/General/… @InsertWittyName,thanx :-) 而且,代表会帮助我上面的哪些问题? 两者都有!委托方法将在您可以访问 bigPreview UIImageView 的控制器中,您还可以控制哪个 TapImage 显示为选中。 【参考方案1】:

这是何时使用delegate method 的完美示例。本质上,委托方法允许一个 viewController 中的操作(单击按钮、点击视图等)来触发另一个 viewController 的方法。

【讨论】:

谢谢 :-)。你能给我一个小例子吗?如何在我上面给出的代码中使用委托。因为我是 Objective-c 的新手,仍然对这个委托的事情感到困惑。 @S.Philip 有很多例子,包括上面链接中的很多。如果您希望我为您编写代码,我很乐意以 90 美元/小时的价格完成。

以上是关于再次触摸 UIImageView 时如何撤消先前触摸的操作以及如何进行预览?的主要内容,如果未能解决你的问题,请参考以下文章

如何触摸 UIImageView,然后用另一个 UIImageView 替换,当手指移动时它会拖动,而不用抬起手指

如何撤消和/或清除添加到 UIView 的 UIImageView?

我有一个 UIImage,它是 UIImageView 中绘制的黑白图像。如何在触摸时用颜色填充线条内部?

延长课第二次煎茶触摸2

防止从 UIImageView 到 superview 的触摸传输

在 Swift 中检测 UIImageView 触摸