iOS 如何手动调整 UIImageView 使其像按钮一样?
Posted
技术标签:
【中文标题】iOS 如何手动调整 UIImageView 使其像按钮一样?【英文标题】:iOS how to manually tweak UIImageView to make it acts like a button? 【发布时间】:2014-09-29 04:13:33 【问题描述】:出于某种原因,我必须使用自定义的UIView
,其中包含几个UIImageView
s 作为按钮。 (我不能使用按钮,因为 imageViews 有独立的动态内容)
我希望它们(我自定义的UIView
中的所有图像视图)在触摸开始时变暗,然后在触摸结束时恢复正常。
我计划使用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
,我该如何修改我的代码来做到这一点?
【问题讨论】:
可能是***.com/questions/4681903/…的副本 @danh 这个不错。 【参考方案1】:为什么不能使用 UIButton ?如果您担心图像大小,可以随时这样处理:
[myButton.imageView setContentMode:UIViewContentModeScaleAspectFill];
其他选项有:
typedef NS_ENUM(NSInteger, UIViewContentMode)
UIViewContentModeScaleToFill,
UIViewContentModeScaleAspectFit,
UIViewContentModeScaleAspectFill,
UIViewContentModeRedraw,
UIViewContentModeCenter,
UIViewContentModeTop,
UIViewContentModeBottom,
UIViewContentModeLeft,
UIViewContentModeRight,
UIViewContentModeTopLeft,
UIViewContentModeTopRight,
UIViewContentModeBottomLeft,
UIViewContentModeBottomRight,
;
这样您就不必实现点击手势。
而且,该按钮具有高亮属性,因此可以解决您的调光问题。
【讨论】:
这是绝对你应该做的。 我不使用UIButton
的原因是UIButton
不支持大量自定义:我无法通过界面生成器将子视图添加到UIButton
(我可以在代码中做到这一点但在我的情况下,我有一些图像视图需要添加到按钮中,并且每个视图都有自动布局约束,我宁愿在界面生成器中使用自动布局)
也许,取一个 UIView(添加任何图像视图并设置自动布局道具。) > 将其子类更改为 UIControl > 这样您的视图可以响应所有事件(UIControlEventTouchUpInside、UIControlEventTouchDown 等)。简而言之,您的视图将充当按钮 :)
@114100웃 好点,这是我今天学到的新东西,谢谢!【参考方案2】:
我会考虑一下您不使用 UIButton 的原因。如果您决定做正确的事,那么您可以通过添加子层来“暗化” 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 的更多属性可用于进一步自定义下状态。
【讨论】:
这解决了我的问题,谢谢! @danh 提到的UIImageView
解决方案的类别非常好,但在我的情况下,我的图像不在应用程序包中,它们是从服务器以代码下载的,所以如果我继续这样做,我将不得不手动保留我自己的原始图像的旧记录。以上是关于iOS 如何手动调整 UIImageView 使其像按钮一样?的主要内容,如果未能解决你的问题,请参考以下文章