出于某种原因,我必须使用自定义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
,如何修改我的这样做的代码?
答案 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属性来进一步自定义您的州。