2019独角兽企业重金招聘Python工程师标准>>>

###摇一摇根据城市位置推荐酒店客户端###

1、实现摇一摇并震动需要导入头文件。#import <AudioToolbox/AudioToolbox.h>

2、当前城市定位,可以看我之前的文字快速定位

3、让vc支持摇一摇。

[self becomeFirstResponder];
[UIApplication sharedApplication].applicationSupportsShakeToEdit = YES;

4、关键代码 在移动的时候将手机震动,并将view显示出来,并请求接口,将酒店显示出来,点击进入到酒店详情界面。

#pragma mark - UIResponder
-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
self.bgView.alpha = 0;
self.bgView.hidden = YES;
[UIView animateWithDuration:1.0 animations:^{
[self getRandomHotel];
self.bgView.alpha = 1;
self.bgView.hidden = NO;
self.hotelImage.image = [UIImage imageNamed:@"My_about"];
self.label.text = @"您已经成功摇到一个酒店,不喜欢?换个姿势再来一次";
[self.label sizeToFit];
self.hotelImage.contentMode = UIViewContentModeScaleAspectFill;
self.hotelImage.autoresizingMask = UIViewAutoresizingFlexibleHeight;
self.hotelImage.clipsToBounds = YES;
//动态设置uilabel的高度
self.hotelLabel.numberOfLines = 0;
self.hotelLabel.lineBreakMode = NSLineBreakByWordWrapping;
} completion:^(BOOL finished) {}];
NSLog(@"摇一摇开始");
return ;
}-(void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event{
NSLog(@"取消摇一摇");
return ;
}-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{
if (motion ==UIEventSubtypeMotionShake ){
NSLog(@"摇一摇结束");
}
return ;
}

全部代码:


//
// ShakeViewController.m
// 住哪儿
//
// Created by geek on 2017/4/30.
// Copyright © 2017年 geek. All rights reserved.
//#import "ShakeViewController.h"
#import "HotelDetailVC.h"
#import "HotelsModel.h"
#import "LocationManager.h"
#import <AudioToolbox/AudioToolbox.h>@interface ShakeViewController ()<LocationManagerDelegate>
@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, strong) UILabel *label;
@property (nonatomic, strong) UIView *bgView;
@property (nonatomic, strong) UILabel *hotelLabel;
@property (nonatomic, strong) UIImageView *hotelImage;
@property (nonatomic, strong) HotelsModel *model;
@property (nonatomic, strong) LocationManager *locationManager;
@property (nonatomic, strong) NSString *cityName;
@property (nonatomic, assign) BOOL showHotel;
@end@implementation ShakeViewController- (void)viewDidLoad {
[super viewDidLoad];
[self setupUI];
[self autoLocate];
}- (void)setupUI {
[self.view addSubview:self.imageView];
[self becomeFirstResponder];
[UIApplication sharedApplication].applicationSupportsShakeToEdit = YES;
[self.view addSubview:self.label];
[self.view addSubview:self.bgView];
[self.bgView addSubview:self.hotelImage];
[self.bgView addSubview:self.hotelLabel];
}-(void)autoLocate{
self.locationManager = [LocationManager sharedInstance];
self.locationManager.delegate = self;
[self.locationManager autoLocate];
}-(void)getRandomHotel{
NSString *url = [NSString stringWithFormat:@"%@%@",Base_Url,@"/controller/api/RandomHotel.php"];
NSMutableDictionary *paras = [NSMutableDictionary dictionary];
paras[@"key"] = AppKey;
paras[@"city"] = self.cityName;
[SVProgressHUD showWithStatus:@"正在获取酒店数据"];
[AFNetPackage getJSONWithUrl:url parameters:paras success:^(id responseObject) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
if ([dic[@"code"] integerValue] == 200) {
[SVProgressHUD dismiss];
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
self.model = [HotelsModel yy_modelWithJSON:dic[@"data"]];
self.hotelLabel.text = self.model.hotelName;
[self.hotelLabel sizeToFit];
[self.hotelImage sd_setImageWithURL:[NSURL URLWithString: [NSString stringWithFormat:@"%@/%@",Base_Url,self.model.image1]] placeholderImage:[UIImage imageNamed:@"jpg-1"]];
}
} fail:^{
[SVProgressHUD dismiss];
}];
}-(void)watchDetail{
HotelDetailVC *vc = [[HotelDetailVC alloc] init];
vc.startPeriod = [[NSDate date] todayString];
vc.leavePerios = [[NSDate date] GetTomorrowDayString];
vc.model = self.model;
[self.navigationController pushViewController:vc animated:YES];
}#pragma mark - LocationManagerDelegate
-(void)locationManager:(LocationManager *)locationManager didGotLocation:(NSString *)location{
self.cityName = location;
}#pragma mark - UIResponder
-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
self.bgView.alpha = 0;
self.bgView.hidden = YES;
[UIView animateWithDuration:1.0 animations:^{
[self getRandomHotel];
self.bgView.alpha = 1;
self.bgView.hidden = NO;
self.hotelImage.image = [UIImage imageNamed:@"My_about"];
self.label.text = @"您已经成功摇到一个酒店,不喜欢?换个姿势再来一次";
[self.label sizeToFit];
self.hotelImage.contentMode = UIViewContentModeScaleAspectFill;
self.hotelImage.autoresizingMask = UIViewAutoresizingFlexibleHeight;
self.hotelImage.clipsToBounds = YES;
//动态设置uilabel的高度
self.hotelLabel.numberOfLines = 0;
self.hotelLabel.lineBreakMode = NSLineBreakByWordWrapping;
} completion:^(BOOL finished) {}];
NSLog(@"摇一摇开始");
return ;
}-(void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event{
NSLog(@"取消摇一摇");
return ;
}-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event{
if (motion ==UIEventSubtypeMotionShake ){
NSLog(@"摇一摇结束");
}
return ;
}#pragma mark - lazy load
-(UIImageView *)imageView{
if (!_imageView) {
_imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, BoundWidth, BoundHeight-60)];
_imageView.image = [UIImage imageNamed:@"shake_news_bgVPic"];
}
return _imageView;
}-(UILabel *)label{
if (!_label) {
_label = [[UILabel alloc] initWithFrame:CGRectMake(BoundWidth/2-200/2, BoundHeight - 60 -270, 200, 21)];
_label.textColor = [UIColor whiteColor];
_label.numberOfLines = 2;
_label.font = [UIFont systemFontOfSize:15];
_label.text = @"摇一摇,为您随机推荐酒店";
[_label sizeToFit];
}
return _label;
}-(UIView *)bgView{
if (!_bgView) {
_bgView = [[UIView alloc] initWithFrame:CGRectMake(15, BoundHeight-260, BoundWidth-30, 120)];
_bgView.backgroundColor = [UIColor whiteColor];
_bgView.layer.cornerRadius = 10;
_bgView.clipsToBounds = YES;
_bgView.alpha = 0;
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(watchDetail)];
tap.cancelsTouchesInView = YES;
_bgView.userInteractionEnabled = YES;
[_bgView addGestureRecognizer:tap];
}
return _bgView;
}-(UIImageView *)hotelImage{
if (!_hotelImage) {
_hotelImage = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 100, 100)];
_hotelImage.contentMode = UIViewContentModeScaleAspectFit;
}
return _hotelImage;
}-(UILabel *)hotelLabel{
if (!_hotelLabel) {
_hotelLabel = [[UILabel alloc] initWithFrame:CGRectMake(135, 40, BoundWidth - 30- 140, 40)];
_hotelLabel.textColor = [UIColor blackColor];
_hotelLabel.font = [UIFont systemFontOfSize:20];
}
return _hotelLabel;
}
@end

效果图

###随机推荐酒店后台实现###

实现思路:

1、接收客户端传来的参数:城市名称、App key;

2、根据城市名称模糊搜索出酒店数据;

3、根据搜索出的酒店数据数组长度,生成1个随机数,随机数范围[1,数组长度];

4、利用封装好的Responese将数据返给客户端

<?php/**
* Created by PhpStorm.
* User: geek
* Date: 2017/3/9
* Time: 上午9:24
*/header('content-type:text.html;charset=utf-8');
error_reporting(0);
require_once '../../model/PdoMySQL.class.php';
require_once '../../model/config.php';
require_once 'Response.php';class RandomHotel
{
private $tableName = "hotel";
private $key = "";
private $city = "";protected static $_instance = null;private function __construct()
{
}private function __clone()
{
// TODO: Implement __clone() method.
}public function sharedInstance(){
if(self::$_instance == null){
self::$_instance = new self();
}
return self::$_instance;
}private function random($start,$end){
$tmp=array();
while(count($tmp)<1){
$tmp[]=mt_rand($start,$end);
$tmp=array_unique($tmp);
}
return $tmp[0]-1;
}public function getHotel(){
$mysqlPdo = new PdoMySQL();self.$this->key = $_REQUEST["key"];
self.$this->city = $_REQUEST["city"];if($this->key == "" || $this->key !== "TheHotelReversationApplication" ){
Response::show(201,"fail","非安全的数据请求","json");
}$pdo=new PdoMySQL();
$res = $pdo->find($this->tableName,"address like '%".$this->city."%'");$random = $this->random(1,count($res));if($res){
//随机酒店获取成功
Response::show(200,"随机酒店获取成功",$res[$random],"json");
}else{
//随机酒店获取失败
Response::show(201,"随机酒店获取失败","json");
}
}
}$hotel = RandomHotel::sharedInstance();
$hotel->getHotel();
?>

想看完整项目献上传送门:住哪儿客户端、:住哪儿服务端

转载于:https://my.oschina.net/u/1778933/blog/889851

摇一摇根据城市位置推荐酒店相关推荐

  1. 摇一摇 周边 与 ibeacon

    "周边"即将入驻微信公众平台 "周边"(zb.weixin.qq.com)平台一直以独立页面的方式存在,之前并未与微信公众平台(mp.weixin.qq.com ...

  2. 利用HTML5的devicemotion事件实现手机摇一摇抽奖,年会抽奖

    摇一摇JS脚本逻辑: 接下来是移动端JS脚本逻辑的实现,摇一摇的实现需借助html5新增的devicemotion事件,获取设备在位置和方向上的改变速度的相关信息,该事件的基本使用如下: if (wi ...

  3. Android手机摇一摇的实现SensorEventListener

    Android手机摇一摇的实现SensorEventListener 看实例 package com.example.shakeactivity;import android.content.Cont ...

  4. grav html5,如何通过html5实现摇一摇的功能

    原理:使用DeviceMotion实现,关于DeviceMotion介绍可以查看 https://developer.mozilla.org/en-US/docs/Web/Reference/Even ...

  5. bugku 管理员系统 后台代码_不会吧,这也行?iOS后台锁屏监听摇一摇

    [toc] 背景介绍 一般情况下,出于省电.权限.合理性等因素考虑,给人的感觉是很多奇怪的需求安卓可以实现,但是iOS就无法实现!今天要介绍的需求也有这种感觉,就是"当 APP 处于后台或锁 ...

  6. C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实现

    C#开发微信门户及应用(28)--微信"摇一摇·周边"功能的使用和接口的实现 原文:C#开发微信门户及应用(28)--微信"摇一摇·周边"功能的使用和接口的实现 ...

  7. android传感器实现摇一摇功能

    现在的不少应用都用到了摇动手机改变内容的功能,比如微信中的"摇一摇"功能.前两天要实现这个功能,稍微看了一下关于传感器Sensor的内容. 传感器有几种类型: 方向传感器: Sen ...

  8. 【WP开发】实现“摇一摇”功能

    尽管我的微信是每八个月登录一次,但我相信各位玩得比我多.微信有一个"摇一摇"功能,这个功能其实是利用了加速度传感器来实现的,这个传感器,我估计再低端的手机都会有的,这是严重基本的传 ...

  9. Flutter代码锦囊---摇一摇

    现在很多APP里面的会出现让用户拿起手机摇一摇的场景,除了最常见的微信.QQ等社交APP里面的摇一摇,我们在把APP给测试人员测试的时候,也经常要添加上摇一摇弹窗切换环境的场景,比如下面的场景. 所以 ...

最新文章

  1. 一文看懂芯片测试产业
  2. 【双11背后的技术】集团AliDocker化双11总结
  3. python读取.nii.gz文件并展示医学图片
  4. SQL基础【十、Delete】
  5. Android使用MPAndroidChat
  6. java封装省市区三级json格式,微信开发 使用picker封装省市区三级联动模板
  7. 二级c语言题型分数,计算机二级C语言题型和评分标准
  8. SharePoint 2013 Nintex Workflow 工作流帮助(九)
  9. 微信开发者工具中导入错误 提示请选择含app.json/project.config.json的目录(纪录篇)
  10. innerXml,outerXml,innerText的不同
  11. 使用Python编写数独游戏自动出题程序
  12. 【codevs1576】最长严格上升子序列
  13. 弹出ifame页面(jquery.reveal.js)
  14. POJ3254 状压DP模板
  15. 安卓开发用什么语言好!这是一份用心整理的Android面试总结,已拿offer入职
  16. 深入浅出boot2.0第六章 数据库事务处理 隔离级别 传播行为
  17. pandas || df.dropna() 缺失值删除
  18. oracle常用errcode
  19. e租宝雇佣黑客攻击网贷之家 帮凶被判二年六个月
  20. 手把手教你读财报----银行业---第十课

热门文章

  1. zookeeper入门学习之java api会话建立《四》
  2. 开课吧:数据分析师常用的分析方法有哪些?
  3. 开课吧Java课堂:线程间是如何实现通信
  4. Apache Ignite事务架构:第三方持久化的事务处理
  5. 《Java程序设计》第16周周四:GUI编程及文件对话框的使用
  6. CentOS利用LVM实现磁盘弹性扩容
  7. 如何屏蔽LOGD\LOGI等打印输出
  8. IOS 学习笔记 2015-03-24 OC-API-不可变字符串
  9. 原地踏步 – 没有突破高效理念的结果
  10. Leetcode1025.除数博弈