2011-05-19 11 views

Respuesta

11

Bueno, implementado onda sinusoidal en el método drawRect UIView como sigue:

float x=75; 
float yc=50; 
float w=0; 
    while (w<=rect.frame.size.width) { 
    CGPathMoveToPoint(path, nil, w,y/2); 
    CGPathAddQuadCurveToPoint(path, nil, w+x/4, -yc,w+ x/2, y/2); 
    CGPathMoveToPoint(path, nil, w+x/2,y/2); 
    CGPathAddQuadCurveToPoint(path, nil, w+3*x/4, y+yc, w+x, y/2); 
    CGContextAddPath(context, path); 
    CGContextDrawPath(context, kCGPathStroke); 
    w+=x; 
    } 

Aquí x sería la anchura de cada onda sinusoidal, mientras que y es la altura del marco. Esto dibujaría el número de ondas sinusoidales para que quepan en todo el UIViewFrame. Produciría una onda sinusoidal de aspecto nítido y yc como mango de control. Inténtalo, puede que te guste.

Si el ancho es decir. x es similar al ancho del marco, entonces se producirá una onda sinusoidal única.

Número de onda sinusoidal completa = (anchura de trama)/(anchura de 'x' de cada onda sinusoidal)

+0

No se mueve la onda sinusoidal – AndrewK

1

hizo una versión más completa, y rápida de la versión de GeneratorOfOne. Este también llena el fondo de la ola con un color elegido:

class WaveView: UIView { 

    private var maskPath: UIBezierPath! 
    @IBInspectable var fillColor: UIColor = UIColor.blueColor() 
    @IBInspectable var cycles: CGFloat = 7 

    override func drawRect(rect: CGRect) { 

     var w: CGFloat = 0    // Starting position 
     let width = rect.width 
     let y: CGFloat = rect.height 
     let yc: CGFloat = rect.height/2 
     let x = width/cycles 

     let context = UIGraphicsGetCurrentContext(); 
     CGContextSetFillColorWithColor(context, UIColor.greenColor().CGColor); 
     let path = CGPathCreateMutable(); 

     CGPathMoveToPoint(path, nil, 0, 0) 

     while (w<=rect.width) { 
      CGPathMoveToPoint(path, nil, w,y/2); 
      CGPathAddQuadCurveToPoint(path, nil, w+x/4, -yc, (w+x/2), y/2); 
      CGPathMoveToPoint(path, nil, w+x/2,y/2); 
      CGPathAddQuadCurveToPoint(path, nil, w+3*x/4, y+yc, w+x, y/2); 
      w+=x; 
     } 

     CGPathAddLineToPoint(path, nil, rect.width, rect.height) 
     CGPathAddLineToPoint(path, nil, 0, rect.height) 
     CGPathAddLineToPoint(path, nil, 0, y/2); 
     CGPathCloseSubpath(path) 

     maskPath = UIBezierPath(CGPath: path) 
     maskPath.lineCapStyle = CGLineCap.Square 
     maskPath.lineJoinStyle = CGLineJoin.Miter 

     CGContextAddPath(context, path); 
     CGContextSetFillColorWithColor(context, fillColor.CGColor) 
     CGContextFillPath(context) 
    } 

} 
Cuestiones relacionadas