亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS繪制專屬于程序猿的浪漫愛心

2020-07-26 03:26:48
字體:
來源:轉載
供稿:網友

近來無事,想想IT該怎樣才能彰顯浪漫情懷,不能口頭上說說而已,最關鍵的是要有可視化的東西展示出來才行~

廢話不多說,直接上Demo

HeartView.h

//// HeartView.h// DrawHeart//// Created by WQL on 16/3/1.// Copyright © 2016年 WQL. All rights reserved.//#import <UIKit/UIKit.h>@interface HeartView : UIView/** * 比率 */@property (nonatomic,assign) CGFloat rate;/** * 填充的顏色 */@property (nonatomic,strong) UIColor *fillColor;/** * 線條的顏色 */@property (nonatomic,strong) UIColor *strokeColor;/** * 線條的寬度 */@property (nonatomic,assign) CGFloat lineWidth;@end

HeartView.m文件:

//// HeartView.m// DrawHeart//// Created by WQL on 16/3/1.// Copyright © 2016年 WQL. All rights reserved.//#import "HeartView.h"http://間距NSInteger const spaceWidth = 5;//波浪的振幅NSInteger const waveAmplitude = 5;@interface HeartView (){  CGFloat t;}@end@implementation HeartView- (instancetype)initWithFrame:(CGRect)frame{  self = [super initWithFrame:frame];  if (self) {    [self loadTimer];  }  return self;}- (void)drawRect:(CGRect)rect{  [super drawRect:rect];    //上面的兩個半圓 半徑為整個frame的四分之一  CGFloat radius = MIN((self.frame.size.width-spaceWidth*2)/4, (self.frame.size.height-spaceWidth*2)/4);    //左側圓心 位于左側邊距+半徑寬度  CGPoint leftCenter = CGPointMake(spaceWidth+radius, spaceWidth+radius);  //右側圓心 位于左側圓心的右側 距離為兩倍半徑  CGPoint rightCenter = CGPointMake(spaceWidth+radius*3, spaceWidth+radius);    //左側半圓  UIBezierPath *heartLine = [UIBezierPath bezierPathWithArcCenter:leftCenter radius:radius startAngle:M_PI endAngle:0 clockwise:YES];  //右側半圓  [heartLine addArcWithCenter:rightCenter radius:radius startAngle:M_PI endAngle:0 clockwise:YES];    //曲線連接到新的底部頂點 為了弧線的效果,控制點,坐標x為總寬度減spaceWidth,剛好可以相切,平滑過度 y可以根據需要進行調整,y越大,所畫出來的線越接近內切圓弧  [heartLine addQuadCurveToPoint:CGPointMake((self.frame.size.width/2), self.frame.size.height-spaceWidth*2) controlPoint:CGPointMake(self.frame.size.width-spaceWidth, self.frame.size.height*0.6)];    //用曲線 底部的頂點連接到左側半圓的左起點 為了弧線的效果,控制點,坐標x為spaceWidth,剛好可以相切,平滑過度。y可以根據需要進行調整,y越大,所畫出來的線越接近內切圓?。ㄐЧ窃脚郑? [heartLine addQuadCurveToPoint:CGPointMake(spaceWidth, spaceWidth+radius) controlPoint:CGPointMake(spaceWidth, self.frame.size.height*0.6)];    //線條處理  [heartLine setLineCapStyle:kCGLineCapRound];  //線寬  [self setHeartLineWidthWithPath:heartLine];  //線條的顏色  [self setHeartStrokeColor];    //根據坐標點連線  [heartLine stroke];  //clipToBounds 切掉多余的部分  [heartLine addClip];      //初始化波浪的構成  UIBezierPath *waves = [UIBezierPath bezierPath];    //首先 把起始點設置為左側 x坐標為spaceWidth 心形從下往上填充,y坐標需要滿足一定的函數關系式,當rate為0時,位置為總高度-2倍的留白距離(spaceWidth)+波浪的振幅;當rate為1時,位置為留白距離(spaceWidth)-振幅。由這兩個狀態構建函數表達式,即可得到如下表達式  CGPoint startPoint = CGPointMake(spaceWidth, (self.frame.size.height-3*spaceWidth+waveAmplitude*2)*(1-self.rate)+spaceWidth-waveAmplitude);  [waves moveToPoint:startPoint];    //關鍵的地方來了 波浪線怎么畫?  //首先,x坐標是從左往右連續的 y坐標是起始的高度加上一定的波動 這里選擇了cos函數。5是波動的幅度大小,50控制的是波峰的間距,t是為了讓其動起來,隨時間發生波動  for (int i = 0; i<self.frame.size.width-spaceWidth*2+self.lineWidth*2; i++) {    //x是要考慮線寬的 不然的話,會導致填充的寬度不夠 y就是在某個值附近波動    CGPoint middlePoint = CGPointMake(spaceWidth+i-self.lineWidth, startPoint.y+waveAmplitude*cos(M_PI/50*i+t));        [waves addLineToPoint:middlePoint];  }    //畫波浪線的右端 到底部的垂直線  [waves addLineToPoint:CGPointMake(self.frame.size.width-spaceWidth*2, self.frame.size.height-spaceWidth*2)];  //畫右側底部的點 到達左側底部的點之間的橫線  [waves addLineToPoint:CGPointMake(spaceWidth, self.frame.size.height-spaceWidth*2)];  //設置填充顏色  [self setHeartFillColor];  //填充  [waves fill];  }//設置線條寬度 默認為1- (void)setHeartLineWidthWithPath:(UIBezierPath*)path{  CGFloat lineW;  if (self.lineWidth) {    lineW = self.lineWidth;  }else{    lineW = 1;  }    [path setLineWidth:lineW];}//設置線條顏色- (void)setHeartStrokeColor{  UIColor *strokColor;  if (self.strokeColor) {    strokColor = self.strokeColor;  }else{    strokColor = [UIColor blackColor];  }    [strokColor set];}//設置填充的顏色- (void)setHeartFillColor{  UIColor *fillColor;  if (self.fillColor) {    fillColor = self.fillColor;  }else{    fillColor = [UIColor orangeColor];  }    [fillColor set];}//為了實現動態的效果,加一個Timer- (void)loadTimer{  NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];  [timer fire];}//t 是一個影響波浪線的參數,每次修改之,再畫,則每次的都不一樣,則有動態的效果- (void)timerAction{  t += M_PI/50;    if (t == M_PI) {    t = 0;  }  //修改了t之后 要調用draw方法  [self setNeedsDisplay];}@end一些關鍵點,我已經注釋啦~

下面就是看看怎么使用這個視圖了:

ViewController.m中:

//// ViewController.m// DrawHeart//// Created by WQL on 16/3/1.// Copyright © 2016年 WQL. All rights reserved.//#import "ViewController.h"#import "HeartView.h"NSInteger const heartWidth = 200;NSInteger const heartHeight = 200;@interface ViewController (){ HeartView *heartView;}@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; heartView = [[HeartView alloc]initWithFrame:CGRectMake((self.view.frame.size.width-heartWidth)/2, (self.view.frame.size.height-heartHeight)/2, heartWidth, heartHeight)]; heartView.rate = 0.5; heartView.lineWidth = 1; heartView.strokeColor = [UIColor blackColor]; heartView.fillColor = [UIColor redColor]; heartView.backgroundColor = [UIColor clearColor]; [self.view addSubview:heartView];  [self loadSlider];}- (void)loadSlider{ UISlider *valueSlider = [[UISlider alloc]initWithFrame:CGRectMake((self.view.frame.size.width-300)/2, self.view.frame.size.height-150, 300, 50)]; valueSlider.minimumValue = 0.0; valueSlider.maximumValue = 1.0; valueSlider.value = 0.5; [valueSlider addTarget:self action:@selector(valueChangedAction:) forControlEvents:UIControlEventValueChanged]; [self.view addSubview:valueSlider];}- (void)valueChangedAction:(UISlider*)slider{ heartView.rate = slider.value;}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end

這里我添加了一個slider,為了實現隨意設置愛心填充的rate。

哈,下面就是看看效果了:

以上就是本文的全部內容,希望對大家的學習有所幫助,快點制作屬于自己浪漫愛心送給自己吧。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品亚洲国产视频| 久久国产精品网站| 日韩h在线观看| 亚洲欧美国产一本综合首页| 久久久日本电影| 亚洲精品欧美日韩专区| 欧洲中文字幕国产精品| 日日狠狠久久偷偷四色综合免费| 国产精品xxx视频| 色天天综合狠狠色| 亚洲字幕一区二区| 亚洲男人天堂2023| 久久精品夜夜夜夜夜久久| 亚洲精品videossex少妇| 精品美女久久久久久免费| 亚洲深夜福利视频| 蜜月aⅴ免费一区二区三区| 精品国产一区二区三区久久久狼| 久久久天堂国产精品女人| 亚洲午夜性刺激影院| 日韩av影片在线观看| 国产成人精品综合| 久久噜噜噜精品国产亚洲综合| 欧美黑人又粗大| 亚洲人成伊人成综合网久久久| 国产精品久久久91| 久久男人av资源网站| 亚洲国产精品一区二区久| 国产精品福利网站| 欧美成人精品在线播放| 日韩**中文字幕毛片| 日韩视频免费中文字幕| 久久这里只有精品99| 欧亚精品中文字幕| 色吧影院999| 姬川优奈aav一区二区| 中文字幕欧美在线| 国产精品久久久久高潮| 欧美激情女人20p| 亚洲欧美日韩图片| 亚洲激情电影中文字幕| 日韩一区av在线| 91久久久久久久一区二区| 精品亚洲精品福利线在观看| 久久久久国产精品免费| 久久人人爽人人爽爽久久| 欧美wwwxxxx| 热99精品里视频精品| 日韩成人在线播放| 91精品国产91久久久久久不卡| 国产精品视频成人| 日韩精品在线视频观看| 日韩欧美精品中文字幕| 欧美成人小视频| 国内精品久久久久久| 国产成人精品视频| 亚洲成色777777在线观看影院| 最好看的2019的中文字幕视频| 浅井舞香一区二区| 97超视频免费观看| 亚洲国产日韩精品在线| 精品日韩美女的视频高清| 欧美成人第一页| 日韩亚洲成人av在线| 一本色道久久88综合日韩精品| 久久久久久国产精品久久| 国产精品久久婷婷六月丁香| 粉嫩老牛aⅴ一区二区三区| xxxx欧美18另类的高清| 91精品久久久久久久久青青| 久久视频免费观看| 日韩精品高清视频| 韩国精品美女www爽爽爽视频| 欧洲亚洲免费在线| 韩国三级电影久久久久久| 久久成人精品一区二区三区| 色妞一区二区三区| 亚洲国产欧美精品| 国产精品久久久久久婷婷天堂| 亚洲欧美国产一本综合首页| 欧美成人h版在线观看| 精品一区二区三区电影| 日韩av在线电影网| 成人免费午夜电影| 精品国产91乱高清在线观看| 韩国日本不卡在线| 91精品视频在线免费观看| 久久精品国产2020观看福利| 亚洲自拍另类欧美丝袜| 国产亚洲免费的视频看| 国产suv精品一区二区三区88区| 成人在线视频网站| 国产欧美精品在线播放| 亚洲电影天堂av| 欧美亚洲国产视频小说| 欧美日韩亚洲一区二区| 亚洲国产另类 国产精品国产免费| 中文字幕日韩在线视频| 欧美一区二区色| 国产一区二区三区在线观看网站| 91久久久亚洲精品| 亚洲欧美成人精品| 久久频这里精品99香蕉| 国内偷自视频区视频综合| 久久久欧美一区二区| 国产精品久久久久久久久久久久久久| 国产精品88a∨| 成人免费视频在线观看超级碰| 国产婷婷成人久久av免费高清| 精品国产福利在线| 欧美日韩精品国产| 日韩在线激情视频| 欧美性猛交xxxxx水多| 久久久久久久久91| 欧美视频一区二区三区…| 久久亚洲欧美日韩精品专区| 奇米四色中文综合久久| 亚洲嫩模很污视频| 欧美性开放视频| 欧美电影在线播放| 亚洲国产精品va| 人九九综合九九宗合| 久久久成人的性感天堂| 欧美性猛交xxxx富婆弯腰| 中文字幕欧美日韩在线| 国产一区二区成人| 国产精品主播视频| 成人444kkkk在线观看| 亚洲精品美女在线观看播放| 国产成人在线一区二区| 国产精品欧美在线| 国产亚洲免费的视频看| 伊人亚洲福利一区二区三区| 亚洲在线免费视频| 久久天天躁狠狠躁夜夜av| 亚洲黄色av女优在线观看| 福利视频第一区| 国产精品久久久久久久久久久不卡| 亚洲人av在线影院| 成人黄色片网站| 日韩av在线资源| 国产精品igao视频| 亚洲成人激情图| 久久成人18免费网站| 5278欧美一区二区三区| 午夜精品福利视频| 国产精品极品美女在线观看免费| 97婷婷大伊香蕉精品视频| 91免费欧美精品| 亚洲国产另类 国产精品国产免费| 欧美黄色性视频| 97人洗澡人人免费公开视频碰碰碰| www国产精品com| 国产成+人+综合+亚洲欧美丁香花| 午夜免费久久久久| 久久精品中文字幕一区| 欧美激情亚洲一区| 一本大道亚洲视频| 欧美国产视频日韩| 日韩人体视频一二区| 亚洲精品av在线| 一本一道久久a久久精品逆3p| 国产丝袜精品视频| 91国自产精品中文字幕亚洲|