返回顶部
首页 > 资讯 > 移动开发 >iOS开发实现转盘功能
  • 757
分享到

iOS开发实现转盘功能

iOS转盘 2022-05-27 03:05:26 757人浏览 泡泡鱼
摘要

本文实例为大家分享了iOS实现转盘功能的具体代码,供大家参考,具体内容如下 今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看 ViewController #pragm

本文实例为大家分享了iOS实现转盘功能的具体代码,供大家参考,具体内容如下

今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看

ViewController


#pragma mark - 如果要旋转那就第一考虑锚点 核心动画看到的都是假象 真实的位置并没有发生改变

//
// ViewController.m
// 5-网易转盘的实现
//
// Created by Jordan zhou on 2018/10/10.
// Copyright © 2018年 Jordan zhou. All rights reserved.
//

#import "ViewController.h"
#import "ZZWheelView.h"

@interface ViewController ()

@property (nonatomic, strong) ZZWheelView *wheelView;

@end

@implementation ViewController

- (IBAction)start:(id)sender {
 [self.wheelView start];
}

- (IBAction)stop:(id)sender {
 [self.wheelView pause];
}

#pragma mark - 懒加载
- (ZZWheelView *)wheelView
{
 if (!_wheelView) {
 _wheelView = [ZZWheelView wheelView];
 _wheelView.center = self.view.center;
 }
 return _wheelView;
}

- (void)viewDidLoad {
 [super viewDidLoad];

 [self.view addSubview:self.wheelView];
}
@end

ZZWheelView


//
// ZZWheelView.h
// 5-网易转盘的实现
//
// Created by Jordan zhou on 2018/10/10.
// Copyright © 2018年 Jordan zhou. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ZZWheelView : UIView
+ (instancetype)wheelView;

- (void)start;

- (void)pause;
@end


// ZZWheelView.m
// 5-网易转盘的实现
//
// Created by Jordan zhou on 2018/10/10.
// Copyright © 2018年 Jordan zhou. All rights reserved.
//

#import "ZZWheelView.h"
#import "ZZWheelButton.h"

@interface ZZWheelView()<CAAnimationDelegate>
@property (weak, nonatomic) IBOutlet UIImageView *centerView;
@property (nonatomic, weak) UIButton *selBtn;
@property (nonatomic, strong) CADisplayLink *link;
@end

@implementation ZZWheelView
#pragma mark - 懒加载
- (CADisplayLink *)link
{
 if (_link == nil) {
 _link = [CADisplayLink displayLinkWithTarget:self selector:@selector(angleChange)];
 [_link addToRunLoop:[NSRunLoop mainRunLoop] fORMode:NSDefaultRunLoopMode];
 }
 return _link;
}

+ (instancetype)wheelView
{
 return [[NSBundle mainBundle] loadNibNamed:@"ZZWheelView" owner:nil options:nil][0];
}

#warning - 注意这个方法只是加载xib的时候会调用,但是并没有连好线
//- (instancetype)initWithCoder:(NSCoder *)aDecoder
//{
// if (self = [super initWithCoder:aDecoder]) {
// NSLog(@"-%@",_centerView);
// }
// return self;
//}

- (void)awakeFromNib
{
 [super awakeFromNib];
 
 _centerView.userInteractionEnabled = YES;
 
 CGFloat btnW = 68;
 CGFloat btnH = 143;
 CGFloat wh = self.bounds.size.width;
 
 // 加载大图片
 UIImage *bigImage = [UIImage imageNamed:@"LuckyAstrology"];
 
 // 加载大图片
 UIImage *selBigImage = [UIImage imageNamed:@"LuckyAstrologyPressed"];
 
 // 获取当前使用的图片像素和点的比例
 CGFloat scale = [UIScreen mainScreen].scale;
 CGFloat imageW = bigImage.size.width / 12 * scale;
 CGFloat imageH = bigImage.size.height * scale;
 // CGImageRef image:需要裁减的图片
 // rect:裁减区域
 // 裁减区域是以像素为基准
 // CGImageCreateWithImageInRect(CGImageRef image, CGRect rect)
 
 // 添加按钮
 for (int i = 0; i < 12; i++) {
 ZZWheelButton *btn = [ZZWheelButton buttonWithType:UIButtonTypeCustom];
 
 // 设置按钮的位置
 btn.layer.anchorPoint = CGPointMake(0.5, 1);
 
 btn.bounds = CGRectMake(0, 0, btnW, btnH);
 
 btn.layer.position = CGPointMake(wh * 0.5, wh * 0.5);
 
 // 按钮的旋转角度
 CGFloat radion = (30 * i) / 180.0 * M_PI;
 
 btn.transform = CGAffineTransformMakeRotation(radion);
 
 [_centerView addSubview:btn];
 
 // 加载按钮的图片
 // 计算裁减区域
 CGRect clipR = CGRectMake(i * imageW, 0, imageW, imageH);
 
 // 裁减图片
 CGImageRef imgR = CGImageCreateWithImageInRect(bigImage.CGImage, clipR);
 
 UIImage *image = [UIImage imageWithCGImage:imgR];
 
 // 设置按钮的图片
 [btn setImage:image forState:UIControlStateNormal];
 
 // 设置选中状态下图片
 imgR = CGImageCreateWithImageInRect(selBigImage.CGImage, clipR);
 
 image = [UIImage imageWithCGImage:imgR];
 
 // 设置按钮的图片
 [btn setImage:image forState:UIControlStateSelected];
 
 // 设置选中背景图片
 [btn setBackgroundImage:[UIImage imageNamed:@"LuckyRototeSelected"] forState:UIControlStateSelected];
 
 // 监听按钮的点击
 [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
 
 // 默认选中第一个
 if (i == 0) {
  [self btnClick:btn];
 }
 }
}

- (void)btnClick:(UIButton *)btn
{
 _selBtn.selected = NO;
 btn.selected = YES;
 _selBtn = btn;
}

#pragma mark - 开始旋转
- (void)start
{
 self.link.paused = NO;
}

// 1.搞个定时器,每隔一段时间就旋转一定的角度,1秒旋转45°

#pragma mark - 暂停旋转
- (void)pause
{
 self.link.paused = YES;
}

#pragma mark - 每隔一段时间旋转一定的角度
- (void)angleChange
{
 // 每一次调用旋转多少 45 \ 60.0
 CGFloat angle = (45 / 60.0) * M_PI / 180.0;
 
 _centerView.transform = CGAffineTransformRotate(_centerView.transform, angle);
}

#pragma mark - 点击开始选号的时候
- (IBAction)startPicker:(id)sender {
 
 // 不需要定时器旋转
 self.link.paused = YES;
 
 // 中间的转盘快速的旋转,并且不需要与用户交互
 CABasicAnimation *anim = [CABasicAnimation animation];
 anim.keyPath = @"transform.rotation";
 anim.toValue = @(M_PI * 2 * 3);
 anim.duration = 0.5;
 anim.delegate = self;
 
 [_centerView.layer addAnimation:anim forKey:nil];
 
 // 点击哪个星座,就把当前星座指向中心点上面
 
 // M_PI 3.14
 // 根据选中的按钮获取旋转的度数,
 // 通过transform获取角度
 CGFloat angle = atan2(_selBtn.transform.b, _selBtn.transform.a);
 
 // 旋转转盘
 _centerView.transform = CGAffineTransformMakeRotation(-angle);
}

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
 self.link.paused = NO;
 });
}
@end

ZZWheelButton


//
// ZZWheelButton.m
// 5-网易转盘的实现
//
// Created by Jordan zhou on 2018/10/10.
// Copyright © 2018年 Jordan zhou. All rights reserved.
//

#import "ZZWheelButton.h"

@implementation ZZWheelButton

// 寻找最合适的view
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
 CGFloat btnW = self.bounds.size.width;
 CGFloat btnH = self.bounds.size.height;
 
 CGFloat x = 0;
 CGFloat y = btnH / 2;
 CGFloat w = btnW;
 CGFloat h = y;
 CGRect rect = CGRectMake(x, y, w, h);
 if (CGRectContainsPoint(rect, point)) {
 return nil;
 }else{
 return [super hitTest:point withEvent:event];
 }
}

// 设置UIImageView的尺寸
// contentRect:按钮的尺寸
- (CGRect)imageRectForContentRect:(CGRect)contentRect
{
 // 计算UIImageView控件尺寸
 CGFloat imageW = 40;
 CGFloat imageH = 46;
 CGFloat imageX = (contentRect.size.width - imageW) * 0.5;
 CGFloat imageY = 20;
 return CGRectMake(imageX, imageY, imageW, imageH);
}

// 取消高亮状态
- (void)setHighlighted:(BOOL)highlighted{}
@end

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: iOS开发实现转盘功能

本文链接: https://lsjlt.com/news/30450.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • iOS开发实现转盘功能
    本文实例为大家分享了iOS实现转盘功能的具体代码,供大家参考,具体内容如下 今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看 ViewController #pragm...
    99+
    2022-05-27
    iOS 转盘
  • iOS开发实现计算器功能
    本文实例为大家分享了iOS实现计算器功能的具体代码,供大家参考,具体内容如下 效果图 Masonry 使用数组来自动约束 NSArray *buttonArrayOne = @...
    99+
    2022-05-28
    iOS 计算器
  • iOS开发实现图片浏览功能
    本文实例为大家分享了iOS实现图片浏览功能的具体代码,供大家参考,具体内容如下 这是整体的效果图: 其中main.stroyboard中的控件有2个button,2个label,一...
    99+
    2024-04-02
  • iOS开发实现简单计算器功能
    用Object-C写的一个简单的计算机程序,主要学习按钮的action动作。 下面是主界面: 下面代码时界面按钮和ViewController.h连接的地方: - (IBActio...
    99+
    2024-04-02
  • iOS实现转盘效果
    本文实例为大家分享了iOS实现转盘效果的具体代码,供大家参考,具体内容如下 Demo下载地址: iOS转盘效果 功能:实现了常用的iOS转盘效果,轮盘抽奖效果的实现,转盘可以暂停,旋...
    99+
    2022-05-25
    iOS 转盘
  • js实现转盘抽奖功能
    本文实例为大家分享了js实现转盘抽奖功能的具体代码,供大家参考,具体内容如下 效果:点击抽奖按钮,转盘开始旋转数圈后停止 示例: 抽奖html代码: <!DOCTYPE htm...
    99+
    2024-04-02
  • iOS开发中最基本的位置功能实现示例
    定位获取位置及位置编码-反编码 我们的应用程序,可以通过添加Core Location框架所包含的类,获取设备的地图位置。 添加CoreLocation.framework框架,导入...
    99+
    2022-05-21
    iOS
  • php 怎么实现大转盘功能
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php 怎么实现大转盘功能?PHP实现大转盘抽奖算法流程:拼装奖项数组,2.计算概率,3.返回中奖情况代码如下:中奖概率 ' v ' 可以在后台设置,传到...
    99+
    2021-03-03
    php 大转盘
  • vue实现大转盘抽奖功能
    本文实例为大家分享了vue实现大转盘抽奖的具体代码,供大家参考,具体内容如下 效果图如下 中奖提示 代码如下 <template>   <div class="...
    99+
    2024-04-02
  • php如何实现大转盘功能
    本篇内容介绍了“php如何实现大转盘功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php实现大转盘功能的方法:1、拼装奖项数组,代码如“...
    99+
    2023-06-25
  • golang怎么实现转发功能
    Golang 是一种非常有用的编程语言,可以被用于构建高效的、可伸缩的网络应用程序。在网络应用程序中,转发是一个非常重要的功能,因为它允许应用程序转发来自客户端的请求。在本文中,我们将展示如何使用 Go 编程语言实现一个简单的转发功能。什么...
    99+
    2023-05-14
  • vue实现简单转盘抽奖功能
    本文实例为大家分享了vue实现简单转盘抽奖的具体代码,供大家参考,具体内容如下 样式请大家忽略(自己调),主要看JS代码实现,点击按钮后调用start方法,判断是否在转动状态,如果...
    99+
    2024-04-02
  • iOS开发中使用屏幕旋转功能的相关方法
    加速计是整个IOS屏幕旋转的基础,依赖加速计,设备才可以判断出当前的设备方向,IOS系统共定义了以下七种设备方向:   typedef NS_ENUM(NSInteger,...
    99+
    2022-05-30
    iOS
  • vue如何实现大转盘抽奖功能
    这篇文章主要为大家展示了“vue如何实现大转盘抽奖功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue如何实现大转盘抽奖功能”这篇文章吧。效果图如下中奖提示代码如下<template&...
    99+
    2023-06-29
  • H5项目如何开发iOS插件功能
    这篇文章主要为大家展示了“H5项目如何开发iOS插件功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“H5项目如何开发iOS插件功能”这篇文章吧。 ...
    99+
    2024-04-02
  • Word转PDF功能实现,文档转换工具通过PHP开发
    最近比较火的文档转换工具相信大家都听说过,但是怎么实现呢? 通过该接口可以将图片、word、excel、ppt等文档转换为pdf格式的文件 可以将Office(Word,Excel,PowerPoint)文件转换为PDF。 转换文件内容、格...
    99+
    2023-09-02
    php http 开发语言
  • iOS实现文件下载功能
    本文实例为大家分享了iOS实现文件下载的具体代码,供大家参考,具体内容如下 说明: 1).获取网络文件大小; 2).开启循环,计算每段position开始与结束位置,通过Range头...
    99+
    2024-04-02
  • iOS实现抖音点赞功能
    目录前言实现原理三角形的贝塞尔曲线原理代码实现创建 CAShapeLayer创建初始位置的贝塞尔path结束前言 很多人肯定都是玩过抖音的吧,那也肯定为了某位美女或者帅哥偷偷作死的点...
    99+
    2024-04-02
  • iOS实现UIButton的拖拽功能
    本文实例为大家分享了iOS实现UIButton拖拽功能的具体代码,供大家参考,具体内容如下 在APP界面中,把资讯等功能设置为悬浮的Button并且能够让用户自己拖拽调整位置很常用。...
    99+
    2022-11-13
    iOS UIButton 拖拽
  • iOS实现计算器小功能
    本文实例为大家分享了iOS实现计算器小功能,供大家参考,具体内容如下 本文利用ios实现计算器app,后期将用mvc结构重构 import UIKit class CalculVi...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作