我应该如何在 iOS 7 中使用具有 iOS 6 风格的 UIButtons?
Posted
技术标签:
【中文标题】我应该如何在 iOS 7 中使用具有 iOS 6 风格的 UIButtons?【英文标题】:How should I use UIButtons with the iOS 6 style in iOS 7? 【发布时间】:2014-03-15 20:53:51 【问题描述】:我正在制作一个为 ios 6 和 7 设计的应用程序,我想让用户选择他们想要的样式:iOS 6 或 iOS 7。或者至少让它完全具有 iOS 6 样式。该应用需要在 App Store 上被接受。
我正在考虑尝试查找要使用的 iOS 6 按钮图像,但由于我是 iOS GUI 编程的新手,我想知道是否有一种我不知道的更简洁的方法来执行此操作。是否有一个我可以简单地添加的框架,以便我可以使用“[[UIButton6 alloc] init]”之类的东西来制作具有旧样式的按钮?或者我可以通过渲染设置自己轻松地做到这一点吗?
任何其他方法也会有所帮助。此外,回答说这根本不可能,但请不要回答告诉我我应该只使用 iOS 7 GUI。我问的是“如何/可以”我这样做,而不是“应该”我这样做。
【问题讨论】:
我希望你已经为这个“功能”做了大量的用户研究。 SCNR。 @MatthiasBauch 我的“研究”是我认识的人都认为 iOS 7 GUI 是可以接受的。我可能只会有一个类似于 iOS 6 的主题,但会更扁平一些,看看会发生什么……这是一个高中项目,所以没有太大的风险。 【参考方案1】:我自己做的是添加带有渐变背景的椭圆形图形。例如,这是我的一个应用程序的代码:
CAGradientLayer* grad = [CAGradientLayer new];
grad.frame = CGRectMake(0,0,15,15);
grad.colors = @[(id)[UIColor colorWithRed:1 green:1 blue:0 alpha:0.8].CGColor,
(id)[UIColor colorWithRed:.7 green:.7 blue:.3 alpha:0.8].CGColor];
UIGraphicsBeginImageContextWithOptions(CGSizeMake(15,15), NO, 0);
UIBezierPath* p = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0,0,15,15) cornerRadius:8];
[p addClip];
[grad renderInContext:UIGraphicsGetCurrentContext()];
[[UIColor blackColor] setStroke];
p.lineWidth = 2;
[p stroke];
UIImage* im = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
im = [im resizableImageWithCapInsets:UIEdgeInsetsMake(7,7,7,7) resizingMode:UIImageResizingModeStretch];
现在使用im
作为按钮的背景图片。
该代码只是一个“服务建议”;尝试一下,然后更改渐变颜色或摆脱渐变或任何您想做的事情。
【讨论】:
这个不错。我用“button.frame.size.width,button.frame.size.height”替换了所有“15,15”部分,然后我调整了渐变以使其更白,然后我将笔画变小。现在我有了一些漂亮的按钮。 它们不太像 iOS 6 的按钮,但也许让它们过于接近 iOS 6 会使 Apple 拒绝该应用程序。反正它们看起来不错。编辑:是的,我也要尝试一个小阴影。【参考方案2】:红旗: 如果你想在 App Store 上被接受,那么故意针对 iOS 6 的外观和感觉是一个严重的危险。 截至 2 月 1 日,Apple is expecting all applications to be "optimized for iOS 7",这不会立即排除您正在讨论的内容,但我个人不会冒险。
【讨论】:
感谢您的警告。我将通过使用经典样式的按钮提交来测试水域,如果他们不喜欢它,我将使其更平坦然后重新提交。但是,无边框按钮不是一种选择。 酷,你可能想看看this other answer on SO【参考方案3】:马特的回答很好,但我找到了一种无需渲染图像的方法。可能更快,代码更紧凑。当渐变有 3 个停止点时,我也更喜欢它:
CAGradientLayer* grad = [CAGradientLayer new];
grad.frame = CGRectMake(0,0,button.frame.size.width,button.frame.size.height);
grad.colors = @[(id)[UIColor colorWithWhite:1 alpha:1].CGColor,(id)[UIColor colorWithWhite:.95 alpha:1].CGColor,(id)[UIColor colorWithWhite:1 alpha:1].CGColor];
grad.locations = @[@(0), @(.5), @(1)];
grad.cornerRadius = 10;
grad.borderColor = [UIColor blackColor].CGColor;
grad.borderWidth = .2;
[button.layer insertSublayer: grad atIndex:0]; //button is the UIButton you want to modify
当然,根据需要编辑渐变、边框等。这是它的样子:
附:万一有人“忍者”了我,我最初在这篇文章中说马特的回答不允许你设置渐变停止,但我错了。
【讨论】:
以上是关于我应该如何在 iOS 7 中使用具有 iOS 6 风格的 UIButtons?的主要内容,如果未能解决你的问题,请参考以下文章
如何管理适用于 iOS 7 和 iOS 6.0 的自动布局约束