代码之家  ›  专栏  ›  技术社区  ›  frankodwyer

如何在iphone上完成具有透明度的圆形正视图?

  •  39
  • frankodwyer  · 技术社区  · 17 年前

    很多应用程序在运行耗时的操作时都会弹出一个带圆角的透明视图和一个activityIndicator。

    这个四舍五入是如何完成的,是否可以只使用界面生成器来完成(因为我想在很多地方使用这样的东西)?或者,我应该使用具有圆形直肠或可拉伸图像的图像视图吗?我需要自己画背景吗?

    5 回复  |  直到 17 年前
        1
  •  47
  •   Kornel    13 年前

    cornerRadius

    view.layer.cornerRadius = 10.0;
    

    view.layer.borderColor = [[UIColor grayColor] CGColor];
    view.layer.borderWidth = 1;
    
        2
  •  78
  •   Mirko Froehlich    17 年前
    view.layer.cornerRadius = radius;
    

    UIView drawRect: 方法:

     CGContextRef context = UIGraphicsGetCurrentContext();
     CGContextSetRGBFillColor(context, 0,0,0,0.75);
    
     CGContextMoveToPoint(context, rect.origin.x, rect.origin.y + radius);
     CGContextAddLineToPoint(context, rect.origin.x, rect.origin.y + rect.size.height - radius);
     CGContextAddArc(context, rect.origin.x + radius, rect.origin.y + rect.size.height - radius, 
                    radius, M_PI, M_PI / 2, 1); //STS fixed
     CGContextAddLineToPoint(context, rect.origin.x + rect.size.width - radius, 
                            rect.origin.y + rect.size.height);
     CGContextAddArc(context, rect.origin.x + rect.size.width - radius, 
                    rect.origin.y + rect.size.height - radius, radius, M_PI / 2, 0.0f, 1);
     CGContextAddLineToPoint(context, rect.origin.x + rect.size.width, rect.origin.y + radius);
     CGContextAddArc(context, rect.origin.x + rect.size.width - radius, rect.origin.y + radius, 
                    radius, 0.0f, -M_PI / 2, 1);
     CGContextAddLineToPoint(context, rect.origin.x + radius, rect.origin.y);
     CGContextAddArc(context, rect.origin.x + radius, rect.origin.y + radius, radius, 
                    -M_PI / 2, M_PI, 1);
    
     CGContextFillPath(context);
    

    注: rect 此代码应取自 [self bounds] 矩形

        3
  •  8
  •   bshirley RoxJ    14 年前

    static void ContextAddRoundedRect(CGContextRef c, CGRect rect, CGFloat radius) {
      CGFloat minX = CGRectGetMinX(rect);
      CGFloat maxX = CGRectGetMaxX(rect);
      CGFloat minY = CGRectGetMinY(rect);
      CGFloat maxY = CGRectGetMaxY(rect);
    
      CGContextMoveToPoint(c, minX + radius, minY);
      CGContextAddArcToPoint(c, maxX, minY, maxX, minY + radius, radius);
      CGContextAddArcToPoint(c, maxX, maxY, maxX - radius, maxY, radius);
      CGContextAddArcToPoint(c, minX, maxY, minX, maxY - radius, radius);
      CGContextAddArcToPoint(c, minX, minY, minX + radius, minY, radius);
    }
    

    CGContextFillPath(c);
    
        4
  •  7
  •   lostInTransit    17 年前

    float radius = 5.0f;
    
    CGRect rect = self.bounds;
    CGContextRef context = UIGraphicsGetCurrentContext();   
    rect = CGRectInset(rect, 1.0f, 1.0f);
    
    CGContextBeginPath(context);
    CGContextSetGrayFillColor(context, 0.5, 0.7);
    CGContextMoveToPoint(context, CGRectGetMinX(rect) + radius, CGRectGetMinY(rect));
    CGContextAddArc(context, CGRectGetMaxX(rect) - radius, CGRectGetMinY(rect) + radius, radius, 3 * M_PI / 2, 0, 0);
    CGContextAddArc(context, CGRectGetMaxX(rect) - radius, CGRectGetMaxY(rect) - radius, radius, 0, M_PI / 2, 0);
    CGContextAddArc(context, CGRectGetMinX(rect) + radius, CGRectGetMaxY(rect) - radius, radius, M_PI / 2, M_PI, 0);
    CGContextAddArc(context, CGRectGetMinX(rect) + radius, CGRectGetMinY(rect) + radius, radius, M_PI, 3 * M_PI / 2, 0);
    
    CGContextClosePath(context);
    CGContextFillPath(context);