最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS 仿百度外賣-首頁(yè)重力感應(yīng)的實(shí)例

 更新時(shí)間:2017年01月03日 10:18:06   作者:Amydom  
這篇文章主要介紹了iOS 仿百度外賣-首頁(yè)重力感應(yīng)的實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。

今天帶來(lái)的是仿百度外賣首頁(yè)的重力感應(yīng)..(由于只能真機(jī)測(cè)試,手里測(cè)試機(jī)只有5s,所以有些地方并沒有適配其他機(jī)型,需要的還需要根據(jù)真機(jī)自行適配)

來(lái)簡(jiǎn)單說(shuō)下實(shí)現(xiàn)吧,之前重力感應(yīng)都是用UIAccelerometer實(shí)現(xiàn)的,但是,好像是從iOS 4 以后,這個(gè)方法就廢棄了,它被直接封裝到了CoreMotion框架中,所以現(xiàn)在有關(guān)重力感應(yīng),加速計(jì)什么的都需要通過(guò)CoreMotion框架實(shí)現(xiàn),這也算是蘋果對(duì)于重力感應(yīng)的整合吧.本文對(duì)CoreMotion框架只是進(jìn)行了簡(jiǎn)單的使用,想要更深的使用,還是請(qǐng)自行 google(百度上的文檔非常少).

好了.下面就是實(shí)現(xiàn)代碼

(注意這里需要導(dǎo)入系統(tǒng)框架CoreMotion.framework)

// 
// ViewController.m 
// 仿百度外賣首頁(yè)-重力感應(yīng) 
// 
// Created by Amydom on 16/12/5. 
// Copyright © 2016年 Amydom. All rights reserved. 
// 
 
#import "ViewController.h" 
#import <CoreMotion/CoreMotion.h> 
 
@interface ViewController ()<UIScrollViewDelegate>{ 
   
  NSTimeInterval updateInterval; 
  CGFloat setx;//scroll的動(dòng)態(tài)偏移量 
   
} 
@property (nonatomic,strong) CMMotionManager *mManager; 
 
@property (nonatomic , strong)UIScrollView *myScrollView; 
 
@property (nonatomic , assign)CGFloat offsetX;//初始偏移量 
 
@property (nonatomic , assign)NSInteger offset; 
 
 
@end 
 
@implementation ViewController 
 
- (void)viewDidAppear:(BOOL)animated_{ 
   
  [super viewDidAppear:animated_]; 
  //在界面已經(jīng)顯示后在調(diào)用方法(優(yōu)化) 
  [self startUpdateAccelerometerResult:0]; 
   
} 
 
- (void)viewDidLoad { 
  [super viewDidLoad]; 
  self.view.backgroundColor = [UIColor whiteColor]; 
  [self createView]; 
   
} 
 
- (void)createView{ 
   
  //collectionView 
  UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init]; 
  UICollectionView *myCollection = [[UICollectionView alloc]initWithFrame:[UIScreen mainScreen].bounds collectionViewLayout:flowLayout]; 
  myCollection.backgroundColor = [UIColor whiteColor]; 
  [self.view addSubview:myCollection]; 
   
   
   
  _myScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 22, self.view.frame.size.width, 100)]; 
  _myScrollView.backgroundColor = [UIColor lightGrayColor]; 
  _myScrollView.delegate = self; 
  [self.view addSubview:_myScrollView]; 
   
   
  for (int i = 0; i < 8; i ++) { 
     
    NSString *name = [NSString stringWithFormat:@"%d.jpg",i + 1]; 
    UIImageView *image = [[UIImageView alloc]initWithFrame:CGRectMake(5 + 885 * i, 10, 80, 80)]; 
    image.image = [UIImage imageNamed:name]; 
    image.backgroundColor = [UIColor orangeColor]; 
    image.layer.masksToBounds = YES; 
    image.layer.cornerRadius = 40; 
    [_myScrollView addSubview:image]; 
    //偏移量為最后 image 的 frame + origin 
    _myScrollView.contentSize = CGSizeMake (image.frame.size.width + image.frame.origin.x, 10); 
     
     
  } 
   
   
 
} 
 
//手指觸碰時(shí) 
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ 
   
   _offsetX = scrollView.contentOffset.x; 
  [self stopUpdate]; 
   
} 
 
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ 
   
  //優(yōu)化處理 
  setx = scrollView.contentOffset.x; 
   
  _offset = scrollView.contentOffset.x - _offsetX; 
   
    if (_offset > 0) { 
   
      //left 
   
    }else{ 
   
      //right 
       
    } 
   
   
} 
//手指離開時(shí) 
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ 
   
  [self startUpdateAccelerometerResult:0]; 
   
} 
 
#pragma mark - 重力感應(yīng) 
- (CMMotionManager *)mManager 
{ 
  if (!_mManager) { 
    updateInterval = 1.0/15.0; 
    _mManager = [[CMMotionManager alloc] init]; 
  } 
  return _mManager; 
} 
//開始 
- (void)startUpdateAccelerometerResult:(void (^)(NSInteger))result 
{ 
 
  if ([self.mManager isAccelerometerAvailable] == YES) { 
    //回調(diào)會(huì)一直調(diào)用,建議獲取到就調(diào)用下面的停止方法,需要再重新開始,當(dāng)然如果需求是實(shí)時(shí)不間斷的話可以等離開頁(yè)面之后再stop 
    [self.mManager setAccelerometerUpdateInterval:updateInterval]; 
    [self.mManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) 
     { 
       double x = accelerometerData.acceleration.x; 
       double y = accelerometerData.acceleration.y; 
       if (fabs(y) >= fabs(x)) 
       {//前后 
         if (y >= 0){ 
           //Down 
         } 
         else{ 
           //Portrait 
         } 
          
       } else { //左右 
         
         if (x >= 0){ 
            
           setx += 10; 
            
           if (setx <= 360) { 
             //由于以10為單位改變 contentOffset, 會(huì)出現(xiàn)頓的現(xiàn)象,加上動(dòng)畫就可解決這個(gè)問(wèn)題 
             [UIView animateWithDuration:0.1 animations:^{ 
                
               _myScrollView.contentOffset = CGPointMake(setx, 0); 
             }]; 
             //模仿 scroll 的回彈效果 
             if (setx == 360) { 
                
               [UIView animateWithDuration:0.5 animations:^{ 
                  
                 _myScrollView.contentOffset = CGPointMake(setx + 50, 0); 
                  
               } completion:^(BOOL finished) { 
                  
                 [UIView animateWithDuration:0.5 animations:^{ 
                    
                   _myScrollView.contentOffset = CGPointMake(setx , 0); 
 
                 }]; 
                  
               }]; 
                
             } 
              
           }else{ 
              
             setx = 360; 
           } 
            
     
         }else{ 
            
           setx -= 10; 
            
           if (setx >= 0) { 
              
             [UIView animateWithDuration:0.1 animations:^{ 
                
               _myScrollView.contentOffset = CGPointMake(setx, 0); 
 
             }]; 
              
             //模仿 scroll 的回彈效果 
             if (setx == 0) { 
                
               [UIView animateWithDuration:0.5 animations:^{ 
                  
                 _myScrollView.contentOffset = CGPointMake(setx - 50, 0); 
                  
               } completion:^(BOOL finished) { 
                  
                 [UIView animateWithDuration:0.5 animations:^{ 
                    
                   _myScrollView.contentOffset = CGPointMake(setx, 0); 
                    
                 }]; 
                  
               }]; 
 
             } 
              
           }else{ 
              
             setx = 0; 
              
           } 
         } 
       } 
     }]; 
  } 
} 
 
//停止感應(yīng)方法 
- (void)stopUpdate 
{ 
  if ([self.mManager isAccelerometerActive] == YES) 
  { 
    [self.mManager stopAccelerometerUpdates]; 
  } 
} 
//離開頁(yè)面后停止(移除 mManager) 
- (void)dealloc 
{ 
  //制空,防止野指針 
  _mManager = nil; 
} 
 
 
- (void)didReceiveMemoryWarning { 
  [super didReceiveMemoryWarning]; 
  // Dispose of any resources that can be recreated. 
} 
 
 
@end 

到這里,就可以進(jìn)行真機(jī)測(cè)試了..

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • iOS中滑動(dòng)控制屏幕亮度和系統(tǒng)音量(附加AVAudioPlayer基本用法和Masonry簡(jiǎn)單使用)

    iOS中滑動(dòng)控制屏幕亮度和系統(tǒng)音量(附加AVAudioPlayer基本用法和Masonry簡(jiǎn)單使用)

    這篇文章主要介紹了iOS中滑動(dòng)控制屏幕亮度和系統(tǒng)音量(附加AVAudioPlayer基本用法和Masonry簡(jiǎn)單使用)的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • iOS開發(fā)Quick Actions創(chuàng)建桌面Icon快捷方式

    iOS開發(fā)Quick Actions創(chuàng)建桌面Icon快捷方式

    在本文里我們給大家分享了關(guān)于iOS開發(fā)Quick Actions創(chuàng)建桌面Icon快捷方式的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的讀者們可以參考下。
    2019-05-05
  • 詳談iOS 位置權(quán)限彈出框閃現(xiàn)的問(wèn)題

    詳談iOS 位置權(quán)限彈出框閃現(xiàn)的問(wèn)題

    下面小編就為大家?guī)?lái)一篇詳談iOS 位置權(quán)限彈出框閃現(xiàn)的問(wèn)題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • iOS中最全的各種定時(shí)器使用教程

    iOS中最全的各種定時(shí)器使用教程

    這篇文章主要給大家介紹了關(guān)于iOS中最全的各種定時(shí)器的使用教程,文中通過(guò)示例代碼介紹的非常詳細(xì),通過(guò)文中介紹的最全的定時(shí)器相信會(huì)對(duì)各位iOS開發(fā)者們帶來(lái)一定的幫助,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • iOS開發(fā)微信支付的方法

    iOS開發(fā)微信支付的方法

    這篇文章主要為大家詳細(xì)介紹了iOS開發(fā)微信支付的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • iOS 更改UILabel某些字體樣式方法

    iOS 更改UILabel某些字體樣式方法

    本文通過(guò)實(shí)例代碼給大家介紹了iOS 更改UILabel某些字體樣式方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-03-03
  • iOS開發(fā)之運(yùn)動(dòng)事件和遠(yuǎn)程控制

    iOS開發(fā)之運(yùn)動(dòng)事件和遠(yuǎn)程控制

    在iOS中事件分為三類:觸摸事件:通過(guò)觸摸、手勢(shì)進(jìn)行觸發(fā)(例如手指點(diǎn)擊、縮放),運(yùn)動(dòng)事件:通過(guò)加速器進(jìn)行觸發(fā)(例如手機(jī)晃動(dòng)),遠(yuǎn)程控制事件:通過(guò)其他遠(yuǎn)程設(shè)備觸發(fā)(例如耳機(jī)控制按鈕)今天我們來(lái)詳細(xì)探討下運(yùn)動(dòng)事件和遠(yuǎn)程控制
    2016-04-04
  • iOS動(dòng)畫-定時(shí)對(duì)UIView進(jìn)行翻轉(zhuǎn)和抖動(dòng)的方法

    iOS動(dòng)畫-定時(shí)對(duì)UIView進(jìn)行翻轉(zhuǎn)和抖動(dòng)的方法

    下面小編就為大家?guī)?lái)一篇iOS動(dòng)畫-定時(shí)對(duì)UIView進(jìn)行翻轉(zhuǎn)和抖動(dòng)的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • iOS實(shí)用教程之Https雙向認(rèn)證詳解

    iOS實(shí)用教程之Https雙向認(rèn)證詳解

    這篇文章主要給大家介紹了關(guān)于iOS中Https雙向認(rèn)證的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-05-05
  • iOS性能優(yōu)化教程之頁(yè)面加載速率詳解

    iOS性能優(yōu)化教程之頁(yè)面加載速率詳解

    在軟件開發(fā)領(lǐng)域里經(jīng)常能聽到這樣一句話,“過(guò)早的優(yōu)化是萬(wàn)惡之源”,不要過(guò)早優(yōu)化或者過(guò)度優(yōu)化。下面這篇文章主要給大家介紹了關(guān)于iOS性能優(yōu)化教程之頁(yè)面加載速率的相關(guān)資料,需要的朋友可以參考下
    2018-09-09

最新評(píng)論

藁城市| 获嘉县| 雅江县| 林甸县| 安义县| 靖安县| 石狮市| 呼和浩特市| 漠河县| 霍林郭勒市| 承德县| 温宿县| 德保县| 宁德市| 枣强县| 革吉县| 淅川县| 宁城县| 盐池县| 潞西市| 肥东县| 桃园县| 宣汉县| 古田县| 广河县| 祁门县| 榆林市| 扬州市| 威信县| 绥中县| 邵阳县| 苏尼特右旗| 岳池县| 内丘县| 尼勒克县| 蕉岭县| 巴林左旗| 信宜市| 阿克陶县| 宁城县| 仪征市|