java演出厅选票_高仿猫眼电影选座(选票)模块-b

上图看效果先:

3755cc15357327f743c8b4d6596af800.gif

7b398e92618e325385907db933c7526f.gif

55c421f53f3c64432c03719a6ac7d8fb.gif

ecb669c831089ba00a6c8df08b1eb59f.gif

1)画座位图其实不是很难一般数据都会给坐标,将坐标对应座位画出来就可以了,主要是开场动画要设置默认大小,还有座位图的数量也不是固定的,所以在初始化座位图的时侯就默认算出了整个座位图的大小

-(instancetype)initWithSeatsArray:(NSMutableArray *)seatsArray maxNomarWidth:(CGFloat)maxW seatBtnActionBlock:(void (^)(id))actionBlock{

if (self = [super init]) {

self.actionBlock = actionBlock;

ZFSeatsModel *seatsModel = seatsArray.firstObject;

NSUInteger cloCount = [seatsModel.columns count];

if (cloCount % 2) cloCount += 1;//偶数列数加1 防止中线压住座位

CGFloat seatViewW = maxW - 2 * ZFseastsRowMargin;

CGFloat seatBtnW = seatViewW / cloCount;

if (seatBtnW > ZFseastMinW_H) {

seatBtnW = ZFseastMinW_H;

seatViewW = cloCount * ZFseastMinW_H;

}

//初始化就回调算出按钮和自身的宽高

CGFloat seatBtnH = seatBtnW;

self.seatBtnWidth = seatBtnW;

self.seatBtnHeight = seatBtnH;

self.seatViewWidth = seatViewW;

self.seatViewHeight = [seatsArray count] * seatBtnH;

//初始化座位

[self initSeatBtns:seatsArray];

}

return self;

}

2)画侧边的索引条 主要就是算出总共有多少列,有没走到之类的 将座位列号根据每个竖向坐标直接画进索引条就可以了

//画索引条

- (void)drawRect:(CGRect)rect {

NSDictionary *attributeName = @{NSFontAttributeName: [UIFont systemFontOfSize:10],NSForegroundColorAttributeName : [UIColor whiteColor]};

CGFloat NuomberTitleH = (self.height - 2 * 10) / self.indexsArray.count;

[self.indexsArray enumerateObjectsUsingBlock:^(ZFSeatsModel *seatsModel, NSUInteger idx, BOOL *stop) {

CGSize strsize =  [seatsModel.rowId sizeWithAttributes:attributeName];

[seatsModel.rowId drawAtPoint:CGPointMake(self.width * 0.5 - strsize.width  * 0.5,10 + idx * NuomberTitleH + NuomberTitleH  * 0.5 - strsize.height  * 0.5) withAttributes:attributeName];

}];

}

3)中线启示也是自定义一个view画一条线线上是label,每次随座位图上下滚动,重新设置自身高度重绘该线条就能达到效果

-(void)setHeight:(CGFloat)height{

[super setHeight:height];

[self setNeedsDisplay];

}

- (void)drawRect:(CGRect)rect {

CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetLineWidth(context, 1.0);

CGContextSetStrokeColorWithColor(context, [UIColor darkGrayColor].CGColor);

CGFloat lengths[] = {6,3};

CGContextSetLineDash(context, 0, lengths,2);

CGContextMoveToPoint(context, 0, 0);

CGContextAddLineToPoint(context, 0, self.bounds.size.height);

CGContextStrokePath(context);

}

4)每次座位图滚动的时候随着偏移量的变化更新其他所有控件的坐标就能达到某一方向跟随scrollview滚动方向移动

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

// 更新applogo

if (scrollView.contentOffset.y <= scrollView.contentSize.height - self.height +ZFseastsColMargin + 15) {

self.maoyanLogo.y = CGRectGetMaxY(self.seatView.frame) + 35;

self.maoyanLogo.centerX = self.seatView.centerX;

}else{

self.maoyanLogo.centerX = self.seatView.centerX;

self.maoyanLogo.y = scrollView.contentOffset.y + self.height - self.maoyanLogo.height;

}

//更新hallLogo

self.hallLogo.y = scrollView.contentOffset.y;

//更新中线

self.centerLine.height = CGRectGetMaxY(self.seatView.frame) + 2 * ZFSmallMargin;

if (scrollView.contentOffset.y < - ZFseastsColMargin ) {

self.centerLine.y = self.seatView.y - ZFseastsColMargin + ZFCenterLineY;

}else{

self.centerLine.y = scrollView.contentOffset.y + ZFCenterLineY;

self.centerLine.height = CGRectGetMaxY(self.seatView.frame) - scrollView.contentOffset.y - 2 * ZFCenterLineY + ZFseastsColMargin;

}

// 更新索引条

self.rowindexView.x = scrollView.contentOffset.x + ZFseastMinW_H;

//更新indicator大小位置

[self.indicator updateMiniIndicator];

if (!self.indicator.hidden || self.seatScrollView.isZoomBouncing)return;

self.indicator.alpha = 1;

self.indicator.hidden = NO;

}

最后不多解释啦上Github地址:https://github.com/ZFbaby/ZFSeatsSelection/blob/master/ZFSeatsSelection

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

input发送a.jax_Java EE 7 / JAX-RS 2.0 – REST上的CORS

input发送a.jaxJava EE REST应用程序在开箱即用的开发机器上通常可以很好地运行&#xff0c;在该机器上&#xff0c;所有服务器端资源和客户端UI都指向“ localhost”或127.0.0.1。 但是&#xff0c;当涉及跨域部署时&#xff08;当REST客户端不再与托管REST API的服务器位于同…

用C/C++开发《Photoshop》图像处理软件

今晚课题【长按识别图中二维码】

C/C++打造《百万级人脸识别系统》

今晚课题【长按识别图中二维码】

rhq监控软件_RHQ指标的WildFly子系统

rhq监控软件对于RHQ-Metrics&#xff0c;我已经开始为WildFly 8编写一个子系统&#xff0c;该子系统能够在WildFly内收集度量&#xff0c;然后以固定的时间间隔&#xff08;当前为每分钟&#xff09;将其发送到RHQ-Metrics服务器。 下一张图是该发件人连续运行1.5天时结果的可…

打造最强加密工具之《绝密信息传递》

今晚课题【长按识别图中二维码】

jooq sql_用jOOQ用Java编写SQL

jooq sqljOOQ是“数据库优先”类型的安全SQL API&#xff0c;使您可以直观地用Java编写SQL&#xff0c;就像Java编译器本身支持SQL语言一样。 所有数据库模式&#xff0c;表&#xff0c;列&#xff0c;过程和其他对象均作为Java对象提供&#xff0c;可以直接在jOOQ SQL API中使…

C/C++打造经典推箱子小游戏

今晚课题【长按识别图中二维码】

C/C++高级算法之绘制曼德布洛特集

今晚课题【长按识别图中二维码】

python mysql 连接6_寒假学习进度-6(Python连接MySQL数据库)

Python连接mysql和操作软件&#xff1a;pycharm开始在pycharm下面的Terminal中安装mysql时提醒pip版本不够&#xff0c;所以需要先升级一下pippython -m pip install --upgrade pip升级完pip之后就可以下载mysqlpip install mysql下载完成后在setting中查看进行代码测试#!/usr/…

C/C++中*和的用法详解

C中&和*的用法一直是非常让人头疼的难点&#xff0c;课本博客上讲这些知识点一般都是分开讲其用法的&#xff0c;没有详细的总结&#xff0c;导致我在这方面的知识结构格外混乱&#xff0c;在网上找到了一篇英文文章简单总结了这两个符号的一些用法&#xff0c;都是一些比较…

C++ 异常的详细介绍

C 异常的详解程序有时会遇到运行阶段错误&#xff0c;导致程序无法正常执行下去。c异常为处理这种情况提供了一种功能强大的而灵活的工具。异常是相对比较新的C功能&#xff0c;有些老编译器可能没有实现。另外&#xff0c;有些编译器默认关闭这种特性&#xff0c;我们可能需要…

neo4j cypher_Neo4j:Cypher –避免热切

neo4j cypher当心渴望的管道 尽管我喜欢Cypher的LOAD CSV命令使它容易地将数据获取到Neo4j中的方法&#xff0c;但它目前打破了最不惊奇的规则&#xff0c;因为它急切地在所有行中加载某些查询&#xff0c;即使是那些使用定期提交的查询。 这是我的同事Michael在他的第二篇博…

C++实现简单走迷宫的代码

用n*n个小方格代表迷宫&#xff0c;每个方格上有一个字符0或1&#xff0c;0代表这个格子不能走&#xff0c;1代表这个格子可以走。只能一个格子一个走&#xff0c;而且只能从一个格子向它的上、下、左、右四个方向走&#xff0c;且不能重复。迷宫的入口和出口分别位于左上角和右…

利用C/C++实现较完整贪吃蛇游戏

利用空余时间写出了这么一个简单的小游戏&#xff0c;直接使用dos界面运行。那么问题来了&#xff0c;如何让一个字符在dos界面上自由移动&#xff1f;&#xff1f;&#xff1f;对于这个问题我采用的解决方案是实现gotoxy函数来控制指针位置从而实现字符的移动。那么我们就先来…

C++中的函数汇总(新手必知)!

math.h 数学函数库,一些数学计算的公式的具体实现是放在math.h里,具体有&#xff1a;1 三角函数double sin (double); double cos (double); double tan (double);2 反三角函数double asin (double); 结果介于[-PI/2, PI/2] double acos (double); 结果介于[0, PI] double …

艾伦图灵_Java英雄:丹·艾伦

艾伦图灵“ Java英雄 ”系列休息了很长时间。 老实说&#xff0c;我想即使有很多人我想把它包括在这里&#xff0c;它也可能会在茫茫荒野中终结。 丹是其中之一。 我第一次要求他捐款已经差不多一年半了&#xff0c;并且在此期间发生的所有事情使我安然无not。 但是以下内容在J…

26条C++的经典语录,哪几句戳中你的心!

2019年悄悄的已经过了三分之二&#xff0c;C你了解了多少&#xff1f;随着互联网的发展&#xff0c;c作为底层语言的龙头老大&#xff0c;是时候站出来了&#xff01;如何学好C,老夫我利用平生所学&#xff0c;整理出26条C经典语录&#xff0c;希望能帮助到每一个热爱C的同学&a…

C语言的10大基础算法

算法是一个程序和软件的灵魂&#xff0c;作为一名优秀的程序员&#xff0c;只有对一些基础的算法有着全面的掌握&#xff0c;才会在设计程序和编写代码的过程中显得得心应手。本文是近百个C语言算法系列的第二篇&#xff0c;包括了经典的Fibonacci数列、简易计算器、回文检查、…

C++实现简单的信息管理系统

本文为大家分享C实现简单的信息管理系统&#xff0c;小编之前在学习的时候也要做一些管理系统&#xff0c;在网上查了许多资料&#xff0c;现在我把资料分享给大家&#xff0c;希望能够帮助到大家。#include <stdio.h> #include <stdlib.h> #include "file.…