如何将 UIToolbar 扩展到其他对象,如 safari
Posted
技术标签:
【中文标题】如何将 UIToolbar 扩展到其他对象,如 safari【英文标题】:how to extend UIToolbar to other objects like safari 【发布时间】:2012-08-15 15:31:18 【问题描述】:我正在尝试实现类似于 Mac 和 iPad 上的 Safari 带有标签的效果,导航栏和当前标签是一体的。如何扩展 UINavigationBar/UIToolbar 以与 UIView 子类合并以显示为 1?
答案:
我创建了我自己的 UIToolbar 子类,并使用 drawRect:(CGRect)rect
方法使 UIToolbar 的颜色与我的 UIView 子类相同,只是那个颜色。
- (void)drawRect:(CGRect)rect
// Drawing code
//// General Declarations
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = UIGraphicsGetCurrentContext();
//// Color Declarations
UIColor* gradientColor = [UIColor colorWithRed: 0.916 green: 0.916 blue: 0.916 alpha: 1];
UIColor* gradientColor2 = [UIColor colorWithRed: 0.811 green: 0.811 blue: 0.811 alpha: 1];
//// Gradient Declarations
NSArray* gradientColors = [NSArray arrayWithObjects:
(id)gradientColor.CGColor,
(id)gradientColor2.CGColor, nil];
CGFloat gradientLocations[] = 0, 1;
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)gradientColors, gradientLocations);
//// Rectangle Drawing
UIBezierPath* rectanglePath = [UIBezierPath bezierPathWithRect: CGRectMake(-1, 0, 769, 45)];
CGContextSaveGState(context);
[rectanglePath addClip];
CGContextDrawLinearGradient(context, gradient, CGPointMake(383.5, -0), CGPointMake(383.5, 45), 0);
CGContextRestoreGState(context);
//// Cleanup
CGGradientRelease(gradient);
CGColorSpaceRelease(colorSpace);
【问题讨论】:
【参考方案1】:这是一个具有自定义外观的自定义控件。将 UIImageViews 与可拉伸的 UIImages 一起使用,并在 PNG 图像中重新创建 GUI。或者使用 Core Graphics 来渲染选项卡的外观。 (PaintCode 可能会有所帮助)。
【讨论】:
是的,我拥有绘制代码,我使用可拉伸图像制作了这种方式的标签,因此它可以制作任何尺寸的标签。不过我不太好,我自己怎么做呢?因为他们也有 uibarbuttonitems 所以我必须编写代码以添加相同的方式不是吗? 只需将标签栏放在带有按钮的导航栏下方即可。 我已经有了标签:P 这样就完成了,只需要知道如何将它与相同的颜色合并,我尝试了颜色选择工具并将其重叠并使用颜色,看起来不一样 张贴截图。我不明白问题出在哪里。 在 mac 和 ipad 上的 safari 中,有一个工具栏/导航栏,然后选项卡对象与之相连,所以如果它是红色的,则当前选项卡将是红色的等等。我如何让我的选项卡(可以是 UIViews,现在是 UIButtons)加入工具栏,这样颜色就会保持不变,看起来像 1【参考方案2】:我创建了自己的 UIToolbar 子类,并使用 drawRect:(CGRect)rect 方法使 UIToolbar 的颜色与我的 UIView 子类的颜色相同。
- (void)drawRect:(CGRect)rect
// Drawing code
//// General Declarations
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = UIGraphicsGetCurrentContext();
//// Color Declarations
UIColor* gradientColor = [UIColor colorWithRed: 0.916 green: 0.916 blue: 0.916 alpha: 1];
UIColor* gradientColor2 = [UIColor colorWithRed: 0.811 green: 0.811 blue: 0.811 alpha: 1];
//// Gradient Declarations
NSArray* gradientColors = [NSArray arrayWithObjects:
(id)gradientColor.CGColor,
(id)gradientColor2.CGColor, nil];
CGFloat gradientLocations[] = 0, 1;
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)gradientColors, gradientLocations);
//// Rectangle Drawing
UIBezierPath* rectanglePath = [UIBezierPath bezierPathWithRect: CGRectMake(-1, 0, 769, 45)];
CGContextSaveGState(context);
[rectanglePath addClip];
CGContextDrawLinearGradient(context, gradient, CGPointMake(383.5, -0), CGPointMake(383.5, 45), 0);
CGContextRestoreGState(context);
//// Cleanup
CGGradientRelease(gradient);
CGColorSpaceRelease(colorSpace);
【讨论】:
以上是关于如何将 UIToolbar 扩展到其他对象,如 safari的主要内容,如果未能解决你的问题,请参考以下文章