摇一摇根据城市位置推荐酒店
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
摇一摇根据城市位置推荐酒店相关推荐
- 摇一摇 周边 与 ibeacon
"周边"即将入驻微信公众平台 "周边"(zb.weixin.qq.com)平台一直以独立页面的方式存在,之前并未与微信公众平台(mp.weixin.qq.com ...
- 利用HTML5的devicemotion事件实现手机摇一摇抽奖,年会抽奖
摇一摇JS脚本逻辑: 接下来是移动端JS脚本逻辑的实现,摇一摇的实现需借助html5新增的devicemotion事件,获取设备在位置和方向上的改变速度的相关信息,该事件的基本使用如下: if (wi ...
- Android手机摇一摇的实现SensorEventListener
Android手机摇一摇的实现SensorEventListener 看实例 package com.example.shakeactivity;import android.content.Cont ...
- grav html5,如何通过html5实现摇一摇的功能
原理:使用DeviceMotion实现,关于DeviceMotion介绍可以查看 https://developer.mozilla.org/en-US/docs/Web/Reference/Even ...
- bugku 管理员系统 后台代码_不会吧,这也行?iOS后台锁屏监听摇一摇
[toc] 背景介绍 一般情况下,出于省电.权限.合理性等因素考虑,给人的感觉是很多奇怪的需求安卓可以实现,但是iOS就无法实现!今天要介绍的需求也有这种感觉,就是"当 APP 处于后台或锁 ...
- C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实现
C#开发微信门户及应用(28)--微信"摇一摇·周边"功能的使用和接口的实现 原文:C#开发微信门户及应用(28)--微信"摇一摇·周边"功能的使用和接口的实现 ...
- android传感器实现摇一摇功能
现在的不少应用都用到了摇动手机改变内容的功能,比如微信中的"摇一摇"功能.前两天要实现这个功能,稍微看了一下关于传感器Sensor的内容. 传感器有几种类型: 方向传感器: Sen ...
- 【WP开发】实现“摇一摇”功能
尽管我的微信是每八个月登录一次,但我相信各位玩得比我多.微信有一个"摇一摇"功能,这个功能其实是利用了加速度传感器来实现的,这个传感器,我估计再低端的手机都会有的,这是严重基本的传 ...
- Flutter代码锦囊---摇一摇
现在很多APP里面的会出现让用户拿起手机摇一摇的场景,除了最常见的微信.QQ等社交APP里面的摇一摇,我们在把APP给测试人员测试的时候,也经常要添加上摇一摇弹窗切换环境的场景,比如下面的场景. 所以 ...
最新文章
- 一文看懂芯片测试产业
- 【双11背后的技术】集团AliDocker化双11总结
- python读取.nii.gz文件并展示医学图片
- SQL基础【十、Delete】
- Android使用MPAndroidChat
- java封装省市区三级json格式,微信开发 使用picker封装省市区三级联动模板
- 二级c语言题型分数,计算机二级C语言题型和评分标准
- SharePoint 2013 Nintex Workflow 工作流帮助(九)
- 微信开发者工具中导入错误 提示请选择含app.json/project.config.json的目录(纪录篇)
- innerXml,outerXml,innerText的不同
- 使用Python编写数独游戏自动出题程序
- 【codevs1576】最长严格上升子序列
- 弹出ifame页面(jquery.reveal.js)
- POJ3254 状压DP模板
- 安卓开发用什么语言好!这是一份用心整理的Android面试总结,已拿offer入职
- 深入浅出boot2.0第六章 数据库事务处理 隔离级别 传播行为
- pandas || df.dropna() 缺失值删除
- oracle常用errcode
- e租宝雇佣黑客攻击网贷之家 帮凶被判二年六个月
- 手把手教你读财报----银行业---第十课