• Quartz2D练习 -- 小黄人


    Main.storyboard

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="5053" systemVersion="13C64" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="vXZ-lx-hvc">
        <dependencies>
            <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3733"/>
        </dependencies>
        <scenes>
            <!--View Controller-->
            <scene sceneID="ufC-wZ-h7g">
                <objects>
                    <viewController id="vXZ-lx-hvc" customClass="LWTViewController" sceneMemberID="viewController">
                        <layoutGuides>
                            <viewControllerLayoutGuide type="top" id="jyV-Pf-zRb"/>
                            <viewControllerLayoutGuide type="bottom" id="2fi-mo-0CV"/>
                        </layoutGuides>
                        <view key="view" contentMode="scaleToFill" id="kh9-bI-dsS" customClass="LWTView">
                            <rect key="frame" x="0.0" y="0.0" width="320" height="480"/>
                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                        </view>
                    </viewController>
                    <placeholder placeholderIdentifier="IBFirstResponder" id="x5A-6p-PRh" sceneMemberID="firstResponder"/>
                </objects>
            </scene>
        </scenes>
        <simulatedMetricsContainer key="defaultSimulatedMetrics">
            <simulatedStatusBarMetrics key="statusBar"/>
            <simulatedOrientationMetrics key="orientation"/>
            <simulatedScreenMetrics key="destination"/>
        </simulatedMetricsContainer>
    </document>
    View Code

    LWTView.h

    #import <UIKit/UIKit.h>
    
    @interface LWTView : UIView
    
    @end
    View Code

    LWTView.m

      1 //
      2 //  LWTView.m
      3 //  Quartz2D练习 -- 小黄人
      4 //
      5 //  Created by apple on 14-6-9.
      6 //  Copyright (c) 2014年 lwt. All rights reserved.
      7 //
      8 
      9 #import "LWTView.h"
     10 #define KTopX rect.size.width * 0.5
     11 #define KTopY 150
     12 #define KTopRadius 80
     13 
     14 @implementation LWTView
     15 
     16 
     17 // Only override drawRect: if you perform custom drawing.
     18 // An empty implementation adversely affects performance during animation.
     19 - (void)drawRect:(CGRect)rect
     20 {
     21     // Drawing code
     22     CGContextRef ctx = UIGraphicsGetCurrentContext();
     23     
     24     CGContextSaveGState(ctx);
     25     CGContextSaveGState(ctx);
     26     CGContextSaveGState(ctx);
     27     
     28     // 画身体
     29     [self drawBody:rect CGContextRef:ctx];
     30     
     31     // 1
     32     CGContextRestoreGState(ctx);
     33     
     34     // 画眼睛
     35     [self drawEyes:rect CGContextRef:ctx];
     36     
     37     // 3
     38     CGContextRestoreGState(ctx);
     39     
     40     //画嘴巴
     41     [self drawMouth:rect CGContextRef:ctx];
     42     
     43     // 画头发
     44     [self drawHair:rect CGContextRef:ctx];
     45 }
     46 
     47 - (void)drawMouth : (CGRect)rect CGContextRef : (CGContextRef)ctx
     48 {
     49     CGFloat controllerX = KTopX;
     50     CGFloat controllerY = KTopY + 100;
     51     CGFloat currentX = controllerX - 30;
     52     CGFloat currentY = controllerY - 20;
     53     CGFloat endX = controllerX + 30;
     54     CGFloat endY = currentY;
     55     
     56     CGContextMoveToPoint(ctx, currentX, currentY);
     57     CGContextAddQuadCurveToPoint(ctx, controllerX, controllerY, endX, endY);
     58     
     59     CGContextStrokePath(ctx);
     60 
     61     
     62 }
     63 
     64 - (void)drawEyes : (CGRect)rect CGContextRef : (CGContextRef)ctx
     65 {
     66     // 画镜架
     67     CGFloat leftGlassesX = KTopX - KTopRadius;
     68     CGFloat leftGlassesY = KTopY;
     69     
     70     CGFloat rightGlassesX = KTopX + KTopRadius;
     71     CGFloat rightGlassesY = leftGlassesY;
     72     
     73     CGContextMoveToPoint(ctx, leftGlassesX, leftGlassesY);
     74     CGContextAddLineToPoint(ctx, rightGlassesX, rightGlassesY);
     75     CGContextSetLineWidth(ctx, 15.0);
     76     
     77     CGContextStrokePath(ctx);
     78     
     79     // 2
     80     CGContextRestoreGState(ctx);
     81     
     82     // 画眼睛
     83     
     84     // 大外圆
     85     CGFloat leftBigOutCircleRedius = KTopRadius - 50;
     86     // 圆心
     87     CGFloat leftBigOutCircleX = KTopX - leftBigOutCircleRedius + 1;
     88     CGFloat leftBigOutCircleY = KTopY;
     89     
     90     CGContextAddArc(ctx, leftBigOutCircleX, leftBigOutCircleY, leftBigOutCircleRedius, 0, 2 * M_PI, 0);
     91     
     92     CGFloat rightBigOutCircleRedius = leftBigOutCircleRedius;
     93     // 圆心
     94     CGFloat rightBigOutCircleX = KTopX + leftBigOutCircleRedius - 1;
     95     CGFloat rightBigOutCircleY = leftBigOutCircleY;
     96     
     97     CGContextAddArc(ctx, rightBigOutCircleX, rightBigOutCircleY, rightBigOutCircleRedius, 0, 2 * M_PI, 0);
     98     
     99     [[UIColor darkGrayColor] set];
    100     
    101     CGContextFillPath(ctx);
    102     
    103     // 大内圆
    104     CGFloat leftBigInsideCircleRedius = leftBigOutCircleRedius - 10;
    105     // 圆心
    106     CGFloat leftBigInsideCircleX = leftBigOutCircleX;
    107     CGFloat leftBigInsideCircleY = leftBigOutCircleY;
    108     
    109     CGContextAddArc(ctx, leftBigInsideCircleX, leftBigInsideCircleY, leftBigInsideCircleRedius, 0, 2 * M_PI, 0);
    110     
    111     CGFloat rightBigInsideCircleRedius = leftBigInsideCircleRedius;
    112     // 圆心
    113     CGFloat rightBigInsideCircleX = rightBigOutCircleX;
    114     CGFloat rightBigInsideCircleY = rightBigOutCircleY;
    115     
    116     CGContextAddArc(ctx, rightBigInsideCircleX, rightBigInsideCircleY, rightBigInsideCircleRedius, 0, 2 * M_PI, 0);
    117     
    118     [[UIColor whiteColor] set];
    119     
    120     CGContextFillPath(ctx);
    121     
    122     // 小外圆
    123     CGFloat leftSmallOutCircleRedius = 8;
    124     // 圆心
    125     CGFloat leftSmallOutCircleX = KTopX - 20;
    126     CGFloat leftSmallOutCircleY = KTopY;
    127     
    128     CGContextAddArc(ctx, leftSmallOutCircleX, leftSmallOutCircleY, leftSmallOutCircleRedius, 0, 2 * M_PI, 0);
    129     
    130     CGFloat rightSmallOutCircleRedius = leftSmallOutCircleRedius;
    131     // 圆心
    132     CGFloat rightSmallOutCircleX = KTopX + leftSmallOutCircleRedius + 13;
    133     CGFloat rightSmallOutCircleY = leftSmallOutCircleY;
    134     
    135     CGContextAddArc(ctx, rightSmallOutCircleX, rightSmallOutCircleY, rightSmallOutCircleRedius, 0, 2 * M_PI, 0);
    136     
    137     [[UIColor colorWithRed:80/255.f green:20/255.f blue:6/255.f alpha:1.0] set];
    138     
    139     CGContextFillPath(ctx);
    140     
    141     // 小内圆
    142     CGFloat leftSmallInsideCircleRedius = 4;
    143     // 圆心
    144     CGFloat leftSmallInsideCircleX = leftSmallOutCircleX;
    145     CGFloat leftSmallInsideCircleY = leftSmallOutCircleY;
    146     
    147     CGContextAddArc(ctx, leftSmallInsideCircleX, leftSmallInsideCircleY, leftSmallInsideCircleRedius, 0, 2 * M_PI, 0);
    148     
    149     CGFloat rightSmallInsideCircleRedius = leftSmallInsideCircleRedius;
    150     // 圆心
    151     CGFloat rightSmallInsideCircleX = rightSmallOutCircleX;
    152     CGFloat rightSmallInsideCircleY = rightSmallOutCircleY;
    153     
    154     CGContextAddArc(ctx, rightSmallInsideCircleX, rightSmallInsideCircleY, rightSmallInsideCircleRedius, 0, 2 * M_PI, 0);
    155     
    156     [[UIColor blackColor] set];
    157     
    158     CGContextFillPath(ctx);
    159     
    160     // 光点
    161     CGFloat leftWhiteCircleRedius = 2;
    162     // 圆心
    163     CGFloat leftWhiteCircleX = leftSmallOutCircleX - leftWhiteCircleRedius - 1;
    164     CGFloat leftWhiteCircleY = leftSmallOutCircleY - leftSmallInsideCircleRedius + 1;
    165     
    166     CGContextAddArc(ctx, leftWhiteCircleX, leftWhiteCircleY, leftWhiteCircleRedius, 0, 2 * M_PI, 0);
    167     
    168     CGFloat rightWhiteCircleRedius = leftWhiteCircleRedius;
    169     // 圆心
    170     CGFloat rightWhiteCircleX = rightSmallOutCircleX - leftWhiteCircleRedius - 1;
    171     CGFloat rightWhiteCircleY = leftWhiteCircleY;
    172     
    173     CGContextAddArc(ctx, rightWhiteCircleX, rightWhiteCircleY, rightWhiteCircleRedius, 0, 2 * M_PI, 0);
    174     
    175     [[UIColor whiteColor] set];
    176     
    177     CGContextFillPath(ctx);
    178 }
    179 
    180 - (void)drawBody : (CGRect)rect CGContextRef : (CGContextRef)ctx
    181 {
    182     CGFloat topX = KTopX;
    183     CGFloat topY = KTopY;
    184     CGFloat topRadius = KTopRadius;
    185     CGContextAddArc(ctx, topX, topY, topRadius, - M_PI, 0, 0);
    186     
    187     CGFloat rightLineX = topX + topRadius;
    188     CGFloat rightLineY = topY + 150;
    189     CGContextAddLineToPoint(ctx, rightLineX, rightLineY);
    190     
    191     CGFloat bottomX = topX;
    192     CGFloat bottomY = rightLineY;
    193     CGFloat bottomRadius = topRadius;
    194     CGContextAddArc(ctx, bottomX, bottomY, bottomRadius, 0, M_PI, 0);
    195     
    196     CGContextClosePath(ctx);
    197     
    198     [[UIColor colorWithRed:252/255.f green:218/255.f blue:0.0 alpha:1.0] set];
    199     
    200     CGContextFillPath(ctx);
    201 }
    202 - (void)drawHair : (CGRect)rect CGContextRef : (CGContextRef)ctx
    203 {
    204     CGFloat x = KTopX;
    205     CGFloat y = KTopY - KTopRadius - 20;
    206     CGContextMoveToPoint(ctx, x, y);
    207     
    208     CGFloat endX = KTopX;
    209     CGFloat endY = y + 25;
    210     CGContextAddLineToPoint(ctx, endX, endY);
    211     
    212     CGContextMoveToPoint(ctx, x + 15, y + 2);
    213     CGContextAddLineToPoint(ctx, endX + 10, endY + 1);
    214     
    215     CGContextMoveToPoint(ctx, x + 30, y + 4);
    216     CGContextAddLineToPoint(ctx, endX + 20, endY + 2);
    217     
    218     CGContextMoveToPoint(ctx, x - 15, y + 2);
    219     CGContextAddLineToPoint(ctx, endX - 10, endY + 1);
    220     
    221     CGContextMoveToPoint(ctx, x - 30, y + 4);
    222     CGContextAddLineToPoint(ctx, endX - 20, endY + 2);
    223     
    224     CGContextMoveToPoint(ctx, x + 45, y + 8);
    225     CGContextAddLineToPoint(ctx, endX + 30, endY + 4);
    226     
    227     CGContextMoveToPoint(ctx, x + 60, y + 16);
    228     CGContextAddLineToPoint(ctx, endX + 40, endY + 8);
    229     
    230     CGContextMoveToPoint(ctx, x - 45, y + 8);
    231     CGContextAddLineToPoint(ctx, endX - 30, endY + 4);
    232     
    233     CGContextMoveToPoint(ctx, x - 60, y + 16);
    234     CGContextAddLineToPoint(ctx, endX - 40, endY + 8);
    235     
    236     CGContextStrokePath(ctx);
    237     
    238     
    239 }
    240 @end
    View Code
  • 相关阅读:
    关于python3导出excel图片链接转图片且图片内嵌表格内实现
    ios下载指定版本frida
    frida打印类下方法模板
    IDEA 报错 Package 'java.util' is declared in module 'java.base', which is not in the module graph
    linux统计当前路径下的文件数量
    Mac 中配置鼠标右键 Open Tabby here
    取消vim粘贴时自动注释功能
    mac 安装字体
    scp 命令提示 Permission denied, please try again.解决方法
    VScode 中如何取消设置文件内容可以滚动到最后一行之后
  • 原文地址:https://www.cnblogs.com/wentianblog/p/3782690.html
Copyright © 2020-2023  润新知