生活随笔
收集整理的這篇文章主要介紹了
IOS开发基础之大转盘案例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
IOS開發(fā)基礎之大轉盤案例
本案例使用xib加載的,以及核心動畫的使用。動態(tài)按鈕的使用和創(chuàng)建。等知識。
源碼在我的主頁資源下。歡迎下載。
核心代碼在這。
#import <UIKit/UIKit.h>
@interface LJRotateView
: UIView
+(instancetype
)rotateView
;
-(void)startRotate
;
@end
#import "LJRotateView.h"@interface LJRotateView
() <UIAlertViewDelegate
>
@property (weak
, nonatomic
) IBOutlet UIImageView
*rotateImage
;
@property(nonatomic
,weak
)UIButton
*currentButton
;@property(nonatomic
,strong
)CADisplayLink
*link
;
- (IBAction
)pickNumber
:(id
)sender
;@end
@implementation LJRotateView
-(void)startRotate
{CADisplayLink
*link
= [CADisplayLink displayLinkWithTarget
:self selector
:@selector(rotate
)];[link addToRunLoop
:[NSRunLoop mainRunLoop
] forMode
:NSDefaultRunLoopMode
];self.link
=link
;
}
-(void)rotate
{self.rotateImage
.transform
= CGAffineTransformRotate(self.rotateImage
.transform
, 2*M_PI
/60/10);}+ (instancetype
)rotateView
{return [[NSBundle mainBundle
] loadNibNamed
:@"LJRotateView" owner
:nil options
:nil
][0];
}
- (void)awakeFromNib
{[super awakeFromNib
];self.rotateImage
.userInteractionEnabled
= YES
;for(int i
=0;i
<12;++i
){UIButton
*btn
= [UIButton buttonWithType
:UIButtonTypeCustom
];btn
.tag
=i
;UIImage
*image
= [UIImage imageNamed
:@"LuckyAstrology"];image
= [self clipImageWithImage
:image withIndex
:i
];[btn setImage
:image forState
:UIControlStateNormal
];UIImage
*imagePress
= [UIImage imageNamed
:@"LuckyAstrologyPressed"];imagePress
= [self clipImageWithImage
:imagePress withIndex
:i
];[btn setImage
:imagePress forState
:UIControlStateSelected
];[btn setBackgroundImage
:[UIImage imageNamed
:@"LuckyRototeSelected"] forState
:UIControlStateSelected
];[btn setImageEdgeInsets
:UIEdgeInsetsMake(-50, 0, 0, 0)];btn
.userInteractionEnabled
=YES
;[self.rotateImage addSubview
:btn
];[btn addTarget
:self action
:@selector(btnClick
:) forControlEvents
:UIControlEventTouchUpInside
];}
}-(void)btnClick
:(UIButton
*)sender
{self.currentButton
.selected
= NO
;sender
.selected
= YES
;self.currentButton
= sender
;}-(void)layoutSubviews
{[super layoutSubviews
];for (int i
=0; i
<self.rotateImage
.subviews
.count
; ++i
) {UIButton
*btn
= self.rotateImage
.subviews
[i
];btn
.frame
= CGRectMake(0, 0, 68, 143);btn
.center
= self.rotateImage
.center
;btn
.layer
.anchorPoint
= CGPointMake(0.5, 1);CGFloat angle
= 2*M_PI
/ 12;btn
.transform
= CGAffineTransformMakeRotation(angle
*i
);}
}
-(UIImage
*)clipImageWithImage
:(UIImage
*)image withIndex
:(NSInteger
)index
{CGFloat w
=image
.size
.width
/ 12*[UIScreen mainScreen
].scale
;CGFloat h
=image
.size
.height
*[UIScreen mainScreen
].scale
;CGFloat x
=index
* w
;CGFloat y
=0;CGImageRef imageRef
= CGImageCreateWithImageInRect(image
.CGImage
,CGRectMake(x
, y
, w
, h
));return [[UIImage alloc
] initWithCGImage
:imageRef scale
:2.3 orientation
:UIImageOrientationUp
];
}
- (IBAction
)pickNumber
:(id
)sender
{if([self.rotateImage
.layer animationForKey
:@"keys"]){return;}self.link
.paused
= YES
;CABasicAnimation
*anim
=[[CABasicAnimation alloc
] init
];anim
.keyPath
= @"transform.rotation";CGFloat angle
=2*M_PI
/ 12 *self.currentButton
.tag
;anim
.toValue
= @(5*M_PI
*2 - angle
);anim
.duration
= 3;anim
.fillMode
=kCAFillModeForwards
;anim
.removedOnCompletion
=NO
;[self.rotateImage
.layer addAnimation
:anim forKey
:@"keys"];dispatch_after(dispatch_time(DISPATCH_TIME_NOW
, (int64_t
)(anim
.duration
* NSEC_PER_SEC
)), dispatch_get_main_queue(), ^{self.rotateImage
.transform
= CGAffineTransformMakeRotation(-angle
);UIAlertController
*alert
=[UIAlertController alertControllerWithTitle
:@"溫馨提示" message
:@"" preferredStyle
:UIAlertControllerStyleAlert
];[self.rotateImage
.layer removeAnimationForKey
:@"keys"];});}- (void)alertView
:(UIAlertView
*)alertView clickedButtonAtIndex
:(NSInteger
)buttonIndex
{self.link
.paused
= NO
;}
@end
#import "ViewController.h"
#import "LJRotateView.h"@interface ViewController
()@end@implementation ViewController
- (void)viewDidLoad
{[super viewDidLoad
];self.view
.layer
.contents
=(__bridge id
)[UIImage imageNamed
:@"LuckyBackground"].CGImage
;LJRotateView
*rotateView
= [LJRotateView rotateView
];rotateView
.center
=self.view
.center
;[self.view addSubview
:rotateView
];}- (BOOL
)prefersStatusBarHidden
{return YES
;
}@end
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的IOS开发基础之大转盘案例的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。