欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS實(shí)現(xiàn)左右拖動(dòng)抽屜效果

 更新時(shí)間:2016年02月27日 09:53:14   作者:wAikAp  
這篇文章主要介紹了iOS實(shí)現(xiàn)左右拖動(dòng)抽屜效果,理解ios平臺(tái)類似于QQ主頁(yè)面,利用觸摸事件滑動(dòng)touchesMoved實(shí)現(xiàn)的效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例介紹了iOS實(shí)現(xiàn)左右拖動(dòng)抽屜效果,具體內(nèi)容如下

利用了觸摸事件滑動(dòng) touchesMoved: 來(lái)觸發(fā)左右視圖的出現(xiàn)和消失 利用loadView方法中添加view 在self.view載入前就把 左右中View都設(shè)置好frame 每一個(gè)方法都由單獨(dú)的功能。

#import "DarwViewController.h"
@interface DarwViewController ()
@property (nonatomic, weak) UIView *leftView;
@property (nonatomic, weak) UIView *rightView;
@property (nonatomic, weak) UIView *mainView;
/**
 * 動(dòng)畫是否進(jìn)行
 */
@property (nonatomic ,assign) BOOL animating;
 
@end
 
@implementation DarwViewController
- (void)viewDidLoad {
 [super viewDidLoad];
}
 
 
-(void)loadView
{
 self.view = [[UIView alloc]initWithFrame:[UIScreen mainScreen].bounds];
 //左邊view
 UIView *leftView = [[UIView alloc]initWithFrame:self.view.frame];
 [self.view addSubview:leftView];
 leftView.backgroundColor= [UIColor redColor];
 self.leftView = leftView;
  
 //右邊View
 UIView *rightView = [[UIView alloc]initWithFrame:self.view.frame];
 [self.view addSubview:rightView];
 rightView.backgroundColor= [UIColor blueColor];
 self.rightView = rightView;
  
 //主頁(yè)面
 UIView *mainView = [[UIView alloc]initWithFrame:self.view.frame];
 [self.view addSubview:mainView];
 mainView.backgroundColor= [UIColor yellowColor];
 self.mainView = mainView;
  
  
 //KVO監(jiān)聽(tīng)
 [self.mainView addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];
}
/**
 * KVO回調(diào)方法 當(dāng)mainView Frame值改變時(shí)觸發(fā)
 *
 * @param keyPath <#keyPath description#>
 * @param object <#object description#>
 * @param change <#change description#>
 * @param context <#context description#>
 */
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
{
 if (self.animating) return; //如果mainView正在動(dòng)畫 就不執(zhí)行
 if (self.mainView.frame.origin.x > 0 )
 {
  //X > 0 就隱藏右邊View 顯示左邊View
  self.rightView.hidden = YES;
  self.leftView.hidden = NO;
 }
 else if (self.mainView.frame.origin.x < 0)
 {
  //X < 0 就隱藏左邊View 顯示右邊VIew
  self.leftView.hidden = YES;
  self.rightView.hidden = NO;
 }
}
#pragma mark -- 觸摸事件
-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
 //獲得觸摸對(duì)象
 UITouch *touch = [touches anyObject];
  
 //獲得當(dāng)前觸摸點(diǎn)
 CGPoint currentPoint = [touch locationInView:self.view];
 //獲得上一個(gè)觸摸點(diǎn)
 CGPoint previousPoint = [touch previousLocationInView:self.view];
  
 //計(jì)算x方向的偏移量
 CGFloat offsetX = currentPoint.x - previousPoint.x;
// 根據(jù)x的偏移量計(jì)算y的偏移量
 self.mainView.frame = [self rectWithOffsetX:offsetX];
  
}
#define screenW [UIScreen mainScreen].bounds.size.width
#define screenH [UIScreen mainScreen].bounds.size.height
/**
 * 計(jì)算主視圖的frame
 *
 * @param offsetX x的偏移量
 *
 * @return 偏移后新的frame
 */
- (CGRect ) rectWithOffsetX:(CGFloat )offsetX
{
 //Y軸的偏移量
 CGFloat offsetY = (screenH *1/5) * (offsetX/screenW);
  
 //比例 :(用于寬高的縮放)
 CGFloat scale = (screenH - offsetY *2) / screenH;
 if (self.mainView.frame.origin.x < 0 )
 {
  //如果x是負(fù)數(shù) 及左邊View要顯示
  //比例就要設(shè)為比1小
  scale = 2 - scale;
 }
 //獲取當(dāng)前mainView的frame
 CGRect frame = self.mainView.frame;
  
 //重新設(shè)置mainView的frame值
 frame.size.width = frame.size.width *scale >screenW ? screenW : frame.size.width *scale;
  
 frame.size.height = frame.size.height *scale >screenH ? screenH :frame.size.height *scale;
  
 frame.origin.x += offsetX;
 frame.origin.y =(screenH - frame.size.height)*0.5;
 //返回偏移后新的frame
 return frame;
}
#define maxRightX (screenW *0.8)
#define maxLeftX (-screenW *0.6)
-(void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
 CGFloat targetX = 0;
 //如果松手的那一下 當(dāng)前mainVIew的x大于屏幕的一半
 if (self.mainView.frame.origin.x > screenW * 0.5)
 {
  //向右邊定位
  targetX = maxRightX;
 }
 //如果松手的那一下 當(dāng)前mainVIew的最大X值小于屏幕的一半
 else if (CGRectGetMaxX(self.mainView.frame) < screenW *0.5)
 {
  //向左邊定位
  targetX = maxLeftX;
 }
  
 //計(jì)算偏移量
 CGFloat offsetX = targetX -self.mainView.frame.origin.x;
  
 self.animating = YES;
  
 [UIView animateWithDuration:0.4 animations:^{
  if (targetX == 0)
  {
   //如果targetX==0 復(fù)位
   self.mainView.frame = self.view.frame;
  }
  else
  {
   //如果targetX != 0 那就到指定位置
   self.mainView.frame = [self rectWithOffsetX:offsetX];
  }
 } completion:^(BOOL finished) {
  self.animating = NO;
 }];
   
}
@end

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

相關(guān)文章

  • iOS中一行代碼實(shí)現(xiàn) UIView 鏤空效果

    iOS中一行代碼實(shí)現(xiàn) UIView 鏤空效果

    這篇文章主要介紹了一行代碼實(shí)現(xiàn) UIView 鏤空效果,這是一種實(shí)現(xiàn) UIView 鏤空效果的方案,可以快速實(shí)現(xiàn)任意形狀的鏤空、文字的鏤空、帶鏤空的毛玻璃效果等。需要的朋友可以參考下
    2018-11-11
  • iOS開(kāi)發(fā)之使用Storyboard預(yù)覽UI在不同屏幕上的運(yùn)行效果

    iOS開(kāi)發(fā)之使用Storyboard預(yù)覽UI在不同屏幕上的運(yùn)行效果

    使用Storyboard做開(kāi)發(fā)效率非常高,為了防止在團(tuán)隊(duì)中發(fā)生沖突,采取的解決辦法是負(fù)責(zé)UI開(kāi)發(fā)的同事最好每人維護(hù)一個(gè)Storyboard, 公用的組件使用輕量級(jí)的xib或者純代碼來(lái)實(shí)現(xiàn),下面小編就給大家介紹如何使用Storyboard預(yù)覽UI在不同屏幕上的運(yùn)行效果,需要的朋友可以參考下
    2015-08-08
  • 移動(dòng)web開(kāi)發(fā)技能之touch事件詳解

    移動(dòng)web開(kāi)發(fā)技能之touch事件詳解

    這篇文章主要為大家介紹了移動(dòng)web開(kāi)發(fā)技能之touch事件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 解決Flutter出現(xiàn)CocoaPods報(bào)錯(cuò)情況(Mac和IOS)

    解決Flutter出現(xiàn)CocoaPods報(bào)錯(cuò)情況(Mac和IOS)

    這篇文章主要為大家介紹了解決Flutter出現(xiàn)CocoaPods報(bào)錯(cuò)情況(Mac和IOS)的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • iOS實(shí)現(xiàn)抽屜效果

    iOS實(shí)現(xiàn)抽屜效果

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)抽屜效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • iOS登錄時(shí)驗(yàn)證手機(jī)號(hào)與倒計(jì)時(shí)發(fā)送驗(yàn)證碼問(wèn)題詳解

    iOS登錄時(shí)驗(yàn)證手機(jī)號(hào)與倒計(jì)時(shí)發(fā)送驗(yàn)證碼問(wèn)題詳解

    這篇文章主要給大家介紹了關(guān)于iOS登錄時(shí)驗(yàn)證手機(jī)號(hào)與倒計(jì)時(shí)發(fā)送驗(yàn)證碼問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧
    2019-01-01
  • 一文詳解NSSecureCoding真的安全嗎

    一文詳解NSSecureCoding真的安全嗎

    這篇文章主要為大家介紹了NSSecureCoding安全深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • iOS UITextField最大字符數(shù)和字節(jié)數(shù)的限制詳解

    iOS UITextField最大字符數(shù)和字節(jié)數(shù)的限制詳解

    在開(kāi)發(fā)中我們經(jīng)常遇到這樣的需求:在UITextField或者UITextView中限制用戶可以輸入的最大字符數(shù)。但在UITextView , UITextfield 中有很多坑,網(wǎng)上的方法也很多。但是并不是很全面吧,這里全面進(jìn)行了總結(jié),有需要的朋友們可以參考借鑒,下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • IOS開(kāi)發(fā)過(guò)程中的消息通知--小紅點(diǎn)

    IOS開(kāi)發(fā)過(guò)程中的消息通知--小紅點(diǎn)

    本文主要介紹了IOS開(kāi)發(fā)過(guò)程中的消息通知--小紅點(diǎn)的相關(guān)知識(shí)。大致分為兩種方法:系統(tǒng)方法和自定義方法。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • 詳解iOS WebDriverAgent 環(huán)境搭建

    詳解iOS WebDriverAgent 環(huán)境搭建

    這篇文章主要介紹了詳解iOS WebDriverAgent 環(huán)境搭建,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01

最新評(píng)論