请问这个app的导航栏如何实现,请高手给点思路。多谢!文字是镂空的貌似很难弄

解决方案 »

  1.   

    它可能是直接把一个View添加到NavigationController的view上了
      

  2.   

    我又看了看应该是个UIScrollView视图,上面应该不是NavigationController,是一个普通的View,关键是上面的文字镂空效果是怎么做到的。
      

  3.   

    楼主应该主要是想知道,顶部的那个view中的文字如何透明而露出底部的背景吧。你可以自定义一个uiview ,在这个自定义view的drawRect 中来绘制。两个层叠加设置blendMode. 使用kCGBlendModeClear 这个值可以在两上层叠加时“擦除”底部层的内容
      

  4.   

    原来是这样,我写了一个demo:其实很简单,我是通过重写UILabel的drawTextInRect方法来实现的:- (void)drawTextInRect:(CGRect)rect {
        CGSize shadowOffset = self.shadowOffset;
        
        CGContextRef c = UIGraphicsGetCurrentContext();
        CGContextSetLineWidth(c, 1);
        CGContextSetLineJoin(c, kCGLineJoinRound);
        
        CGContextSetTextDrawingMode(c, kCGTextStroke);
        self.textColor = [UIColor whiteColor];
        [super drawTextInRect:rect];    self.shadowOffset = shadowOffset;
    }关键点是kCGTextStroke
      

  5.   

    blendMode很难达到这种效果,因为你一个层画完整的Text,另一个画字号小一点的Text,这样才能达到擦出重叠区域的效果,但是字体大小不同,其间距也不同,很难刚好把一个小号的字体嵌入到大号的字体中心去
      

  6.   

    我要忏悔,昨天光把注意力放在文字镂空上了其实这个效果和镂空没有关系,还是得用blend
      

  7.   


    蓝色和橙色加载同样地文字样式,只是颜色不一样,位置一致。
    蓝色显示左边部分,橙色显示右边部分,使用clipstobound YES
      

  8.   

    blendMode很难达到这种效果,因为你一个层画完整的Text,另一个画字号小一点的Text,这样才能达到擦出重叠区域的效果,但是字体大小不同,其间距也不同,很难刚好把一个小号的字体嵌入到大号的字体中心去
    字号大小不同你都看出来了,你是说左边及右边的字体大小不同吗?绘制的时候我可以分开来绘制吧。不知道你有什么更好的方案呢
      

  9.   

    blendMode很难达到这种效果,因为你一个层画完整的Text,另一个画字号小一点的Text,这样才能达到擦出重叠区域的效果,但是字体大小不同,其间距也不同,很难刚好把一个小号的字体嵌入到大号的字体中心去
    字号大小不同你都看出来了,你是说左边及右边的字体大小不同吗?绘制的时候我可以分开来绘制吧。不知道你有什么更好的方案呢你好,是整个导航栏都要自己绘制吗?新手没经验,之前没做个这种自定义的控件,都是使用系统自带的。请多指教。
      

  10.   

    看看这个:https://github.com/robinsenior/RSMaskedLabel
      

  11.   

    做个navbar的图片 文字是透明的不就好了