iOS如何手动调整UIImageView使其像按钮一样?

时间:2014-09-29 04:13:33

标签: ios uiview uiimageview uigesturerecognizer

出于某种原因,我必须使用自定义UIView,其中包含多个UIImageView作为按钮。 (我不能使用按钮,因为imageViews具有独立的动态内容)

我希望它们(我的自定义UIView中的所有imageViews)在触摸开始时变暗,然后在触摸结束时恢复正常。

我计划使用UITapGestureRecognizer来实现此目的。因此,在我的自定义UIView中,我有一个tapGestureRecognizer。我的代码如下所示:

- (void)costomizedViewTapped:(UITapGestureRecognizer *)tapRecognizer {
  if (tapRecognizer.state == UIGestureRecognizerStateBegan) {
    // dim all my imageViews
    NSLog(@"dimmed");
  }
  if (tapRecognizer.state == UIGestureRecognizerStateCancelled ||
      tapRecognizer.state == UIGestureRecognizerStateEnded ||
      tapRecognizer.state == UIGestureRecognizerStateFailed) {
    // make all my imageViews back to normal
    NSLog(@"normaled");
    if (tapRecognizer.state == UIGestureRecognizerStateEnded) {
      // do something to handle the tap
    }
  }
}

我这个简单的愚蠢问题是,如何调暗imageViews使它们看起来像按下按钮?

此外,我发现我的代码只能为每次点击退出normaled消息,但我希望它能够在点击开始时注销dimmed,如何修改我的这样做的代码?

2 个答案:

答案 0 :(得分:2)

为什么不能使用UIButton?如果您担心图像大小,您可以像这样处理它:

[myButton.imageView setContentMode:UIViewContentModeScaleAspectFill];

其他选项包括:

typedef NS_ENUM(NSInteger, UIViewContentMode) {
    UIViewContentModeScaleToFill,
    UIViewContentModeScaleAspectFit,      
    UIViewContentModeScaleAspectFill,     
    UIViewContentModeRedraw,              
    UIViewContentModeCenter,              
    UIViewContentModeTop,
    UIViewContentModeBottom,
    UIViewContentModeLeft,
    UIViewContentModeRight,
    UIViewContentModeTopLeft,
    UIViewContentModeTopRight,
    UIViewContentModeBottomLeft,
    UIViewContentModeBottomRight,
};

这样您就不必实现轻击手势。

并且,按钮具有高亮属性,这样可以解决您的调光问题。

答案 1 :(得分:1)

我会考虑一下你不使用UIButton的原因。如果你决定做正确的事,那么你可以" dim"通过添加子图层来创建UIImageView。

我会继承UIImageView并使用类似的东西:

CALayer *downStateLayer = [CALayer layer];
downStateLayer.backgroundColor = [[UIColor grayColor] CGColor];
downStateLayer.opacity = 0.5;
downStateLayer.frame = self.view.frame;
[self.view.layer addSublayer:downStateLayer];

删除暗淡效果:

[downStateLayer removeFromSuperlayer];

您可以使用更多CALayer属性来进一步自定义您的州。