使用自定义拨号UIControl

时间:2016-07-13 14:38:09

标签: ios objective-c swift custom-controls uicontrol

我使用本教程http://www.thinkandbuild.it/building-a-custom-and-designabl-control-in-swift/了解iOS应用程序的自定义控件。在与教程中的控件交互时,我注意到CPU使用率非常高。 现在我对我自己的应用程序使用类似的控件,我的绘图功能导致几乎相同的CPU使用率。我甚至不使用下面示例代码中的渐变。

所以我的问题是,如果我能以任何方式对其进行优化,或者我应该认为自己对使用apple的标准绘图方法可以实现的目标感到满意。

override func drawRect(rect: CGRect){
    super.drawRect(rect)

    let ctx = UIGraphicsGetCurrentContext()


    /** Draw the Background **/

    CGContextAddArc(ctx, CGFloat(self.frame.size.width / 2.0), CGFloat(self.frame.size.height / 2.0), radius, 0, CGFloat(M_PI * 2), 0)
    UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0).set()

    CGContextSetLineWidth(ctx, 72)
    CGContextSetLineCap(ctx, CGLineCap.Butt)

    CGContextDrawPath(ctx, CGPathDrawingMode.Stroke)


    /** Draw the circle **/

    /** Create THE MASK Image **/
    UIGraphicsBeginImageContext(CGSizeMake(self.bounds.size.width,self.bounds.size.height));
    let imageCtx = UIGraphicsGetCurrentContext()
    CGContextAddArc(imageCtx, CGFloat(self.frame.size.width/2)  , CGFloat(self.frame.size.height/2), radius, 0, CGFloat(DegreesToRadians(Double(angle))) , 0);
    UIColor.redColor().set()

    //Use shadow to create the Blur effect
    CGContextSetShadowWithColor(imageCtx, CGSizeMake(0, 0), CGFloat(self.angle/15), UIColor.blackColor().CGColor);

    //define the path
    CGContextSetLineWidth(imageCtx, Config.TB_LINE_WIDTH)
    CGContextDrawPath(imageCtx, CGPathDrawingMode.Stroke)

    //save the context content into the image mask
    let mask:CGImageRef = CGBitmapContextCreateImage(UIGraphicsGetCurrentContext())!;
    UIGraphicsEndImageContext();

    /** Clip Context to the mask **/
    CGContextSaveGState(ctx)

    CGContextClipToMask(ctx, self.bounds, mask)


    /** The Gradient **/

    // Split colors in components (rgba)
    let startColorComps:UnsafePointer<CGFloat> = CGColorGetComponents(startColor.CGColor);
    let endColorComps:UnsafePointer<CGFloat> = CGColorGetComponents(endColor.CGColor);

    let components : [CGFloat] = [
        startColorComps[0], startColorComps[1], startColorComps[2], 1.0,     // Start color
        endColorComps[0], endColorComps[1], endColorComps[2], 1.0      // End color
    ]

    // Setup the gradient
    let baseSpace = CGColorSpaceCreateDeviceRGB()
    let gradient = CGGradientCreateWithColorComponents(baseSpace, components, nil, 2)

    // Gradient direction
    let startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect))
    let endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect))

    // Draw the gradient
    CGContextDrawLinearGradient(ctx, gradient, startPoint, endPoint, []);
    CGContextRestoreGState(ctx);

    /* Draw the handle */
    drawTheHandle(ctx!)

}

下面的代码描述了我绘制句柄的方法。它只创建一个带有白色边界的灰色圆圈。

func drawTheHandle(context: CGContextRef){
    CGContextSaveGState(context)
    handleCenter = pointFromAngle(Int(-angleInt), radius: wheelRadius, center: centerOfCircle)
    grayColor.set();
    CGContextAddArc(context, handleCenter.x, handleCenter.y, handleRadius, 0, 360, 0)
    CGContextDrawPath(context, CGPathDrawingMode.Fill)
    UIColor.whiteColor().set();
    CGContextAddArc(context, handleCenter.x, handleCenter.y, handleRadius, 0, 360, 0)
    CGContextDrawPath(context, CGPathDrawingMode.Stroke)
    CGContextRestoreGState(context);
}

0 个答案:

没有答案