123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- //
- // WidgetSpeedView.m
- // KulexiuForStudent
- //
- // Created by 王智 on 2022/9/13.
- //
- #import "WidgetSpeedView.h"
- @interface WidgetSpeedView ()
- {
- CGFloat _lastPointAngle;//上一个点相对于x轴角度
- CGPoint _centerPoint;
- }
- @property (weak, nonatomic) IBOutlet UIImageView *nodeImage;
- @property (weak, nonatomic) IBOutlet UILabel *speedLabel;
- @property (weak, nonatomic) IBOutlet UIView *bgView;
- /** 控制频率View */
- @property (nonatomic, strong) UIImageView *controlSpeedView;
- @end
- @implementation WidgetSpeedView
- - (void)awakeFromNib {
- [super awakeFromNib];
- [self createUI];
- }
- + (instancetype)shareInstance {
- WidgetSpeedView *view = [[[NSBundle mainBundle] loadNibNamed:@"WidgetSpeedView" owner:nil options:nil] firstObject];
- return view;
- }
- - (void)createUI {
- _centerPoint = CGPointMake(300 / 2, kScreenWidth / 2);//中心点
-
- self.controlSpeedView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"speed_dot"]];
- [self.bgView addSubview:self.controlSpeedView];
- [self.controlSpeedView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.right.bottom.left.mas_equalTo(self.bgView);
- }];
-
- }
- - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
-
- UITouch *touch = [touches anyObject];
- CGPoint point = [touch locationInView:self];
- //计算上一个点相对于x轴的角度
- CGFloat lastPointRadius = sqrt(pow(point.y - _centerPoint.y, 2) + pow(point.x - _centerPoint.x, 2));
- if (lastPointRadius == 0) {
- return;
- }
- _lastPointAngle = acos((point.x - _centerPoint.x) / lastPointRadius);
- if (point.y > _centerPoint.y) {
- _lastPointAngle = 2 * M_PI - _lastPointAngle;
- }
- }
- - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
- UITouch *touch = [touches anyObject];
- CGPoint currentPoint = [touch locationInView:self];
- // CGPoint preLocation = [touch preciseLocationInView:self];
-
- //1.计算当前点相对于x轴的角度
- CGFloat currentPointRadius = sqrt(pow(currentPoint.y - _centerPoint.y, 2) + pow(currentPoint.x - _centerPoint.x, 2));
- if (currentPointRadius == 0) {//当点在中心点时,被除数不能为0
- return;
- }
- CGFloat curentPointAngle = acos((currentPoint.x - _centerPoint.x) / currentPointRadius);
- if (currentPoint.y > _centerPoint.y) {
- curentPointAngle = 2 * M_PI - curentPointAngle;
- }
- //2.变化的角度
- CGFloat angle = _lastPointAngle - curentPointAngle;
- NSLog(@"angle ----- %f",angle);
- // 小点点的位置
- self.controlSpeedView.transform = CGAffineTransformRotate(self.controlSpeedView.transform, angle);
- _lastPointAngle = curentPointAngle;
-
- if (angle > 0 && angle < 1) {
- if (self.delegate && [self.delegate respondsToSelector:@selector(changeSpeedWithIsAdd:speed:)]) {
- [self.delegate changeSpeedWithIsAdd:YES speed:MIN(1, MAX(angle *2, 1))];
- }
- }
- else if(angle < 0 && angle > -1) {
- if (self.delegate && [self.delegate respondsToSelector:@selector(changeSpeedWithIsAdd:speed:)]) {
- [self.delegate changeSpeedWithIsAdd:NO speed:MIN(1, MAX(angle *2, 1))];
- }
- }
- }
- - (void)setSpeed:(int)speed {
- _speed = speed;
- self.speedLabel.text = [NSString stringWithFormat:@"%d", speed];
- }
- //- (void)setCurrentType:(KSWidgeMetronomeType)currentType {
- // _currentType = currentType;
- // switch (currentType) {
- // case KSWidgeMetronomeType1V2:
- // case KSWidgeMetronomeType2V2:
- // {
- // [self.nodeImage setImage:[UIImage imageNamed:@"half_node"]];
- // }
- // break;
- // case KSWidgeMetronomeType1V4:
- // case KSWidgeMetronomeType2V4:
- // case KSWidgeMetronomeType3V4:
- // case KSWidgeMetronomeType4V4:
- // {
- // [self.nodeImage setImage:[UIImage imageNamed:@"quarter_node"]];
- // }
- // break;
- // case KSWidgeMetronomeType3V8:
- // case KSWidgeMetronomeType6V8:
- // {
- // [self.nodeImage setImage:[UIImage imageNamed:@"eighth_node"]];
- // }
- // break;
- // case KSWidgeMetronomeType8V16:
- // {
- // [self.nodeImage setImage:[UIImage imageNamed:@"sixteenth_node"]];
- // }
- // break;
- // default:
- // break;
- // }
- //}
- /*
- // Only override drawRect: if you perform custom drawing.
- // An empty implementation adversely affects performance during animation.
- - (void)drawRect:(CGRect)rect {
- // Drawing code
- }
- */
- @end
|