如何将 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的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将项目添加到 UIToolbar 不起作用

如何为 UIToolbar 上的按钮添加滚动?

如何在 UIToolbar 完成按钮中将焦点从一个 UIButton 设置到另一个 UIButton

UIToolbar 在横向上不会变小

如何禁用 UIToolbar 灵活空间项点击

如何将 uitoolbar 添加到 uitableviewcontroller?