自定義圓環,可轉動,可點擊,中間可自定義圖片

一個自定義的圓環,可轉動,給每個按鈕添加跳轉或者事件,自己加了一些點擊時播放系統的聲音和振動,直接上代碼,粘貼復制可用:


.h文件:

.m文件:


定義的變量


#pragma mark -? 加子視圖

- (void)addSubviewWithSubView:(NSArray *)imageArray andTitle:(NSArray *)titleArray andSize:(CGSize)size andCenterImage:(UIImage *)centerImage

{

_subViewSize=size;

_numOfSubView = (CGFloat)titleArray.count;

btnArray = [[NSMutableArray alloc]init];

for(NSInteger i=0; i<_numOfSubView ;i++){

UIButton *button=[[UIButton alloc] initWithFrame:CGRectMake(20*Width, 20*Width, size.width*Width, size.height*Height)];

[button setImage:imageArray[i] forState:UIControlStateNormal];

//設置image在button上的位置(上top,左left,下bottom,右right)這里可以寫負值,對上寫-5,那么image就象上移動5個像素

[button setTitle:titleArray[i] forState:UIControlStateNormal];

[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

button.titleLabel.font = [UIFont systemFontOfSize:16*Width];

button.titleLabel.textAlignment = NSTextAlignmentCenter;

CGFloat devcide = KScreenHeight;

//? ? ? ? button.imageEdgeInsets = UIEdgeInsetsMake(6*Width,6*Width,10*Width,button.titleLabel.bounds.size.width);

if (devcide == 568.000000) {

button.imageEdgeInsets = UIEdgeInsetsMake(6,6,8,button.titleLabel.bounds.size.width);

button.titleEdgeInsets = UIEdgeInsetsMake(55, -button.imageView.bounds.size.width-50, 0, 8);

}else if (devcide == 480.000000){

button.imageEdgeInsets = UIEdgeInsetsMake(2,10,5,button.titleLabel.bounds.size.width);

button.titleEdgeInsets = UIEdgeInsetsMake(55, -button.imageView.bounds.size.width-50, 2, 5);

}else if (devcide == 736.000000){

button.imageEdgeInsets = UIEdgeInsetsMake(8,8,8,button.titleLabel.bounds.size.width);

button.titleEdgeInsets = UIEdgeInsetsMake(70, -button.imageView.bounds.size.width-40, 0, 0);

}else{

button.imageEdgeInsets = UIEdgeInsetsMake(5,6,8,button.titleLabel.bounds.size.width);

button.titleEdgeInsets = UIEdgeInsetsMake(60, -button.imageView.bounds.size.width-45, 0, 0);

}

[button addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];

button.tag=100+i;

[btnArray addObject:button];

[_subViewArray addObject:button];

[_circleView addSubview:button];

}

[self layoutBtn];

//中間視圖

UIButton *buttonCenter=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width/3.0, self.frame.size.height/3.0)];

buttonCenter.tag=100+_numOfSubView+1;

buttonCenter.layer.cornerRadius=self.frame.size.width/6.0;

//? ? [buttonCenter setTitleColor:[UIColor blackColor]forState:UIControlStateNormal];

[buttonCenter setImage:centerImage forState:UIControlStateNormal];

buttonCenter.center=CGPointMake(self.frame.size.width/2, self.frame.size.height/2);

[buttonCenter addTarget:self action:@selector(clickBtnCenter:) forControlEvents:UIControlEventTouchUpInside];

[_subViewArray addObject:buttonCenter];

[_circleView addSubview:buttonCenter];

//加轉動手勢

_pgr=[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(zhuanPgr:)];

[_circleView addGestureRecognizer:_pgr];

//加點擊效果

for (NSInteger i=0; i<_subViewArray.count; i++) {

UIButton *button=_subViewArray[i];

[button addTarget:self action:@selector(subViewOut:) forControlEvents:UIControlEventTouchUpInside];

}

}

- (void)clickBtn:(UIButton *)btn

{

NSLog(@"%zd圓環按鈕點擊了",btn.tag);

kaiduImage.alpha = 1;

[UIView animateWithDuration:2.0 animations:^{

kaiduImage.alpha = 0;

} completion:^(BOOL finished) {

}];

if (btn.tag == 100) {

mStartAngle = M_PI_2*3;

[self layoutBtn];

}

if (btn.tag == 101) {

mStartAngle = M_PI_2*2.32;

[self layoutBtn];

}

if (btn.tag == 102) {

mStartAngle = M_PI_2*1.68;

[self layoutBtn];

}

if (btn.tag == 103) {

mStartAngle = M_PI_2*1;

[self layoutBtn];

}

if (btn.tag == 104) {

mStartAngle = M_PI_2*0.32;

[self layoutBtn];

}

if (btn.tag == 105) {

//? ? ? ? mStartAngle = M_PI_2*3.66;

mStartAngle = -M_PI_2*0.32;

[self layoutBtn];

}

NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

if ([user boolForKey:@"voice"]) {

//播放音效

//1.獲得音效文件的全路徑

NSURL *soundUrl = [[NSBundle mainBundle] URLForResource:@"click.wav" withExtension:nil];

//2.加載音效文件,創建音效ID(SoundID,一個ID對應一個音效文件)

AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundUrl, &soundID);

//把需要銷毀的音效文件的ID傳遞給它既可銷毀

AudioServicesPlaySystemSound(soundID);

}

if ([user boolForKey:@"vibration"]) {

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

}

}

//點擊圓心按鈕

- (void)clickBtnCenter:(UIButton *)btnCenter

{

NSLog(@"圓心按鈕點擊了");

}

//按鈕布局

-(void)layoutBtn{

for (NSInteger i=0; i<_numOfSubView ;i++) {// 178,245

CGFloat devcide = KScreenHeight;

if (devcide == 480.000000) {

CGFloat yy=145+sin((i/_numOfSubView)*M_PI_2*4+mStartAngle)*(self.frame.size.width/2-_subViewSize.width/2-20);

CGFloat xx=148+cos((i/_numOfSubView)*M_PI_2*4+mStartAngle)*(self.frame.size.width/2-_subViewSize.width/2-20);

UIButton *button=[btnArray objectAtIndex:i];

button.center=CGPointMake(xx, yy);

}else if (devcide == 736.000000){

CGFloat yy=195+sin((i/_numOfSubView)*M_PI_2*4+mStartAngle)*(self.frame.size.width/2-_subViewSize.width/2-30);

CGFloat xx=195+cos((i/_numOfSubView)*M_PI_2*4+mStartAngle)*(self.frame.size.width/2-_subViewSize.width/2-30);

UIButton *button=[btnArray objectAtIndex:i];

button.center=CGPointMake(xx, yy);

}else{

CGFloat yy=175*Height+sin((i/_numOfSubView)*M_PI*2+mStartAngle)*(self.frame.size.width/2-_subViewSize.width/2-20*Height);

CGFloat xx=175*Width+cos((i/_numOfSubView)*M_PI*2+mStartAngle)*(self.frame.size.width/2-_subViewSize.width/2-20*Width);

UIButton *button=[btnArray objectAtIndex:i];

button.center=CGPointMake(xx, yy);

}

}

}

NSTimer *flowtime;

NSTimer *reverseTime;

float anglePerSecond;

float speed;? //轉動速度

#pragma mark - 轉動手勢

-(void)zhuanPgr:(UIPanGestureRecognizer *)pgr

{

if(pgr.state==UIGestureRecognizerStateBegan){

kaiduImage.alpha = 1.0;

mTmpAngle = 0;

beginPoint=[pgr locationInView:self];

startTouchDate=[NSDate date];

}else if (pgr.state==UIGestureRecognizerStateChanged){

float StartAngleLast = mStartAngle;

movePoint= [pgr locationInView:self];

float start = [self getAngle:beginPoint];? //獲得起始弧度

float end = [self getAngle:movePoint];? ? //結束弧度

if ([self getQuadrant:movePoint] == 1 || [self getQuadrant:movePoint] == 4) {

mStartAngle += end - start;

mTmpAngle += end - start;

//? ? ? ? ? ? NSLog(@"第一、四象限____%f",mStartAngle);

} else

// 二、三象限,色角度值是付值

{

mStartAngle += start - end;

mTmpAngle += start - end;

//? ? ? ? ? ? NSLog(@"第二、三象限____%f",mStartAngle);

//? ? ? ? ? ? NSLog(@"mTmpAngle is %f",mTmpAngle);

}

[self layoutBtn];

beginPoint=movePoint;

speed = mStartAngle - StartAngleLast;

NSTimeInterval time=[[NSDate date] timeIntervalSinceDate:startTouchDate];

anglePerSecond = mTmpAngle*50/ time;

}else if (pgr.state==UIGestureRecognizerStateEnded){

// 計算,每秒移動的角度

NSTimeInterval time=[[NSDate date] timeIntervalSinceDate:startTouchDate];

anglePerSecond = mTmpAngle*50/ time;

// 如果達到該值認為是快速移動

if (anglePerSecond > 0) {

if (fabsf(anglePerSecond) > mFlingableValue && !_isPlaying) {//順時針

// post一個任務,去自動滾動

_isPlaying = true;

flowtime = [NSTimer scheduledTimerWithTimeInterval:0.1

target:self

selector:@selector(flowAction)

userInfo:nil

repeats:YES];

}

}else{

if (-fabsf(anglePerSecond) < -mFlingableValue && !_isPlaying) {//逆時針

_isPlaying = true;

reverseTime = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(reverseAction) userInfo:nil repeats:YES];

}

}

NSLog(@"%f-----!!!!!!!!!!!",mStartAngle);

//wxb 非快速滑動停止時

if (_isPlaying==false)

{

if (mStartAngle>=0)

{

if (fmod(mStartAngle, M_PI*2)>M_PI_2*2.32+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)<=M_PI_2*3+M_PI_2*0.32) {

mStartAngle = M_PI_2*3;

[self layoutBtn];

self.clickSomeOne(@"100");

}

if (fmod(mStartAngle, M_PI*2)>M_PI_2*1.68+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)<=M_PI_2*2.32+M_PI_2*0.32) {

mStartAngle = M_PI_2*2.32;

[self layoutBtn];

self.clickSomeOne(@"101");

}

if (fmod(mStartAngle, M_PI*2)>M_PI_2*1+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)<=M_PI_2*1.68+M_PI_2*0.32) {

mStartAngle = M_PI_2*1.68;

[self layoutBtn];

self.clickSomeOne(@"102");

}

if (fmod(mStartAngle, M_PI*2)>M_PI_2*0.32+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)<=M_PI_2*1+M_PI_2*0.32) {

mStartAngle = M_PI_2*1;

[self layoutBtn];

self.clickSomeOne(@"103");

}

if (fmod(mStartAngle, M_PI*2)>0&&fmod(mStartAngle, M_PI*2)<=M_PI_2*0.32+M_PI_2*0.32) {

mStartAngle = M_PI_2*0.32;

[self layoutBtn];

//? ? ? ? ? ? ? ? ? ? self.clickSomeOne(@"104");

}

if (fmod(mStartAngle, M_PI*2)-M_PI*2<=0&&fmod(mStartAngle, M_PI*2)-M_PI*2>=-M_PI_2*0.32*2) {

//? ? ? ? mStartAngle = M_PI_2*3.66;

mStartAngle = -M_PI_2*0.32;

[self layoutBtn];

self.clickSomeOne(@"105");

}

}

else

{

if (fmod(mStartAngle, M_PI*2)+M_PI*2>M_PI_2*2.32+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)+M_PI*2<=M_PI_2*3+M_PI_2*0.32) {

mStartAngle = M_PI_2*3;

[self layoutBtn];

self.clickSomeOne(@"100");

}

if (fmod(mStartAngle, M_PI*2)+M_PI*2>M_PI_2*1.68+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)+M_PI*2<=M_PI_2*2.32+M_PI_2*0.32) {

mStartAngle = M_PI_2*2.32;

[self layoutBtn];

self.clickSomeOne(@"101");

}

if (fmod(mStartAngle, M_PI*2)+M_PI*2>M_PI_2*1+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)+M_PI*2<=M_PI_2*1.68+M_PI_2*0.32) {

mStartAngle = M_PI_2*1.68;

[self layoutBtn];

self.clickSomeOne(@"102");

}

if (fmod(mStartAngle, M_PI*2)+M_PI*2>M_PI_2*0.32+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)+M_PI*2<=M_PI_2*1+M_PI_2*0.32) {

mStartAngle = M_PI_2*1;

[self layoutBtn];

self.clickSomeOne(@"103");

}

if (fmod(mStartAngle, M_PI*2)+M_PI*2>0+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)+M_PI*2<=M_PI_2*0.32+M_PI_2*0.32) {

mStartAngle = M_PI_2*0.32;

[self layoutBtn];

//? ? ? ? ? ? ? ? ? ? self.clickSomeOne(@"104");

}

if (fmod(mStartAngle, M_PI*2)<=0&&fmod(mStartAngle, M_PI*2)>=-M_PI_2*0.32*2) {

//? ? ? ? mStartAngle = M_PI_2*3.66;

mStartAngle = -M_PI_2*0.32;

[self layoutBtn];

self.clickSomeOne(@"105");

}

}

}

}

}

- (void)beginPlayMusic

{

NSUserDefaults *user = [NSUserDefaults standardUserDefaults];

if ([user boolForKey:@"voice"]) {

//播放音效

//1.獲得音效文件的全路徑

NSURL *soundUrl = [[NSBundle mainBundle] URLForResource:@"swipe.mp3" withExtension:nil];

//2.加載音效文件,創建音效ID(SoundID,一個ID對應一個音效文件)

AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundUrl, &soundID);

//把需要銷毀的音效文件的ID傳遞給它既可銷毀

AudioServicesPlaySystemSound(soundID);

}

}

//獲取當前點弧度

-(float)getAngle:(CGPoint)point {

double x = point.x - mRadius;

double y = point.y - mRadius;

return (float) (asin(y / hypot(x, y)));

}

/**

* 根據當前位置計算象限

*

* @param x

* @param y

* @return

*/

-(int) getQuadrant:(CGPoint) point {

int tmpX = (int) (point.x - mRadius);

int tmpY = (int) (point.y - mRadius);

if (tmpX >= 0) {

return tmpY >= 0 ? 1 : 4;

} else {

return tmpY >= 0 ? 2 : 3;

}

}

-(void)flowAction{

if (speed < 0.1) {

[UIView animateWithDuration:2 animations:^{

kaiduImage.alpha = 0;

} completion:^(BOOL finished) {

}];

_isPlaying = false;

[flowtime invalidate];

flowtime = nil;

//wxb

if (fmod(mStartAngle, M_PI*2)>M_PI_2*2.32+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)<=M_PI_2*3+M_PI_2*0.32) {

mStartAngle = M_PI_2*3;

[self layoutBtn];

self.clickSomeOne(@"100");

}

if (fmod(mStartAngle, M_PI*2)>M_PI_2*1.68+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)<=M_PI_2*2.32+M_PI_2*0.32) {

mStartAngle = M_PI_2*2.32;

[self layoutBtn];

self.clickSomeOne(@"101");

}

if (fmod(mStartAngle, M_PI*2)>M_PI_2*1+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)<=M_PI_2*1.68+M_PI_2*0.32) {

mStartAngle = M_PI_2*1.68;

[self layoutBtn];

self.clickSomeOne(@"102");

}

if (fmod(mStartAngle, M_PI*2)>M_PI_2*0.32+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)<=M_PI_2*1+M_PI_2*0.32) {

mStartAngle = M_PI_2*1;

[self layoutBtn];

self.clickSomeOne(@"103");

}

if (fmod(mStartAngle, M_PI*2)>0&&fmod(mStartAngle, M_PI*2)<=M_PI_2*0.32+M_PI_2*0.32) {

mStartAngle = M_PI_2*0.32;

[self layoutBtn];

//? ? ? ? ? ? self.clickSomeOne(@"104");

}

if (fmod(mStartAngle, M_PI*2)-M_PI*2<=0&&fmod(mStartAngle, M_PI*2)-M_PI*2>=-M_PI_2*0.32*2) {

//? ? ? ? mStartAngle = M_PI_2*3.66;

mStartAngle = -M_PI_2*0.32;

[self layoutBtn];

self.clickSomeOne(@"105");

}

return;

}

// 不斷改變mStartAngle,讓其滾動,/30為了避免滾動太快

mStartAngle += speed ;

speed = speed/1.1;

// 逐漸減小這個值

//? ? anglePerSecond /= 1.1;

NSLog(@"++ %f--%f",mStartAngle,speed);

[self layoutBtn];

}

- (void)reverseAction

{

//? ? NSLog(@"%f",speed);

if (speed > -0.1) {

[UIView animateWithDuration:2 animations:^{

kaiduImage.alpha = 0;

} completion:^(BOOL finished) {

}];

_isPlaying = false;

[reverseTime invalidate];

reverseTime = nil;

//wxb

if ((fmod(mStartAngle, M_PI*2)+M_PI*2>M_PI_2*2.32+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)+M_PI*2<=M_PI_2*3+M_PI_2*0.32)||(fmod(mStartAngle, M_PI*2)>M_PI_2*2.32+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)<=M_PI_2*3+M_PI_2*0.32)) {

mStartAngle = M_PI_2*3;

[self layoutBtn];

self.clickSomeOne(@"100");

}

if ((fmod(mStartAngle, M_PI*2)+M_PI*2>M_PI_2*1.68+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)+M_PI*2<=M_PI_2*2.32+M_PI_2*0.32)||(fmod(mStartAngle, M_PI*2)>M_PI_2*1.68+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)<=M_PI_2*2.32+M_PI_2*0.32)) {

mStartAngle = M_PI_2*2.32;

[self layoutBtn];

self.clickSomeOne(@"101");

}

if ((fmod(mStartAngle, M_PI*2)+M_PI*2>M_PI_2*1+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)+M_PI*2<=M_PI_2*1.68+M_PI_2*0.32)||(fmod(mStartAngle, M_PI*2)>M_PI_2*1+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)<=M_PI_2*1.68+M_PI_2*0.32)) {

mStartAngle = M_PI_2*1.68;

[self layoutBtn];

self.clickSomeOne(@"102");

}

if ((fmod(mStartAngle, M_PI*2)+M_PI*2>M_PI_2*0.32+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)+M_PI*2<=M_PI_2*1+M_PI_2*0.32)||(fmod(mStartAngle, M_PI*2)>M_PI_2*0.32+M_PI_2*0.32&&fmod(mStartAngle, M_PI*2)<=M_PI_2*1+M_PI_2*0.32)) {

mStartAngle = M_PI_2*1;

[self layoutBtn];

self.clickSomeOne(@"103");

}

if ((fmod(mStartAngle, M_PI*2)+M_PI*2>0&&fmod(mStartAngle, M_PI*2)+M_PI*2<=M_PI_2*0.32+M_PI_2*0.32)||(fmod(mStartAngle, M_PI*2)>0&&fmod(mStartAngle, M_PI*2)<=M_PI_2*0.32+M_PI_2*0.32)) {

mStartAngle = M_PI_2*0.32;

[self layoutBtn];

//? ? ? ? ? ? self.clickSomeOne(@"104");

}

if (fmod(mStartAngle, M_PI*2)<=0&&fmod(mStartAngle, M_PI*2)>=-M_PI_2*0.32*2) {

//? ? ? ? mStartAngle = M_PI_2*3.66;

mStartAngle = -M_PI_2*0.32;

[self layoutBtn];

self.clickSomeOne(@"105");

}

return;

}

mStartAngle += speed;

speed = speed/1.1;

[self layoutBtn];

}

//按鈕的點擊回調

-(void)subViewOut:(UIButton *)button

{

//點擊

if(self.clickSomeOne){

self.clickSomeOne([NSString stringWithFormat:@"%ld",(long)button.tag]);

}

//? ? NSLog(@"快點播放,別要點我");

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,367評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,001評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,213評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,535評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,317評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,868評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,963評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,090評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,599評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,549評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,712評論 1 367
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,233評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,961評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,353評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,607評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,321評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,686評論 2 370

推薦閱讀更多精彩內容

  • 轉自:http://www.code4app.com/blog-866962-1317.html1、設置UILab...
    MMOTE閱讀 1,651評論 1 1
  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,759評論 0 33
  • 芙蓉匝清池,鮮朗不自知, 翩翩神仙質,皎皎珠玉姿, 何不當春發,榮華會有期, 春花良亦好,開先落還早。 新買了傳說...
    美芽芽閱讀 376評論 1 2
  • 首先找一張難度適合自己的圖片 然后開始臨摹 注意構圖比例 可以先簡單的畫,后面勾線時再補充 等畫好后,用勾線筆勾出...
    機李滬理閱讀 405評論 0 1
  • zs 我一位獨居與山間的老農,年過半百的容貌,但腰挺得筆直。房屋位于山的頂端,門口約五十步遠,懸崖邊,生有需兩人合...
    zs123閱讀 311評論 0 0