(素材源碼)貓貓學IOS(二十六)UI之iOS抽屜效果小Demo,iosui

來源:互聯網
上載者:User

(素材源碼)貓貓學IOS(二十六)UI之iOS抽屜效果小Demo,iosui

貓貓分享,必須精品

素材代碼地址:http://download.csdn.net/detail/u013357243/8635679
原創文章,歡迎轉載。轉載請註明:翟乃玉的部落格
地址:http://blog.csdn.net/u013357243?viewmode=contents

先看效果

源碼NYDrawViewController.h
////  NYDrawViewController.h//  06-抽屜效果////  Created by apple on 14-9-1.//  Copyright (c) 2014年 itcast. All rights reserved.//#import <UIKit/UIKit.h>@interface NYDrawViewController : UIViewController@property (nonatomic, weak, readonly) UIView *mainView;@property (nonatomic, weak, readonly) UIView *leftView;@property (nonatomic, weak, readonly) UIView *rightView;@end

NYDrawViewController.m

////  NYDrawViewController.m//  06-抽屜效果////  Created by apple on 14-9-1.//  Copyright (c) 2014年 itcast. All rights reserved.//#import "NYDrawViewController.h"@interface NYDrawViewController ()@property (nonatomic, assign) BOOL isDraging;@end@implementation NYDrawViewController- (void)viewDidLoad{    // UIViewController    [super viewDidLoad];    // Do any additional setup after loading the view.    // 1.添加子控制項    [self addChildView];#warning 第三步 觀察_mainView的frame改變    // 2.監聽    /**     *  給_mainView添加一個觀察者     *     *  KeyPath:監聽frame這個屬性     *     *  options:監聽新值的改變     */    [_mainView addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];}// 當_mainView的frame屬性改變的時候就會調用- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{    NSLog(@"%@", NSStringFromCGRect(_mainView.frame));    if (_mainView.frame.origin.x < 0) { // 往左移動        // 顯示右邊        _rightView.hidden = NO;        // 隱藏左邊        _leftView.hidden = YES;    }else if (_mainView.frame.origin.x > 0){ // 往右移動        // 顯示左邊        _rightView.hidden = YES;        // 隱藏右邊        _leftView.hidden = NO;    }}#warning 第一步- (void)addChildView{    // left    UIView *leftView = [[UIView alloc] initWithFrame:self.view.bounds];    leftView.backgroundColor = [UIColor greenColor];    [self.view addSubview:leftView];    _leftView = leftView;    // right    UIView *rightView = [[UIView alloc] initWithFrame:self.view.bounds];    rightView.backgroundColor = [UIColor blueColor];    [self.view addSubview:rightView];    _rightView = rightView;    // mainView    UIView *mainView = [[UIView alloc] initWithFrame:self.view.bounds];    mainView.backgroundColor = [UIColor redColor];    [self.view addSubview:mainView];    _mainView = mainView;}#warning 第二步- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{    // 擷取UITouch對象    UITouch *touch = [touches anyObject];    // 擷取當前點    CGPoint currentPoint = [touch locationInView:self.view];    // 擷取上一個點    CGPoint prePoint = [touch previousLocationInView:self.view];    // x軸位移量:當手指移動一點的時候,x位移多少    CGFloat offsetX = currentPoint.x - prePoint.x;    // 設定當前主視圖的frame    _mainView.frame = [self getCurrentFrameWithOffsetX:offsetX];    _isDraging = YES;}#warning 第四步#define NYMaxY 60// 當手指位移一點,根據X軸的位移量算出當前主視圖的frame- (CGRect)getCurrentFrameWithOffsetX:(CGFloat)offsetX{    CGFloat screenW = [UIScreen mainScreen].bounds.size.width;    CGFloat screenH = [UIScreen mainScreen].bounds.size.height;    // 擷取y軸位移量,手指每移動一點,y軸位移多少    CGFloat offsetY = offsetX * NYMaxY / screenW;    CGFloat scale = (screenH - 2 * offsetY) / screenH;    if (_mainView.frame.origin.x < 0) { // 往左邊滑動        scale = (screenH + 2 * offsetY) / screenH;    }    // 擷取之前的frame    CGRect frame = _mainView.frame;    frame.origin.x += offsetX;    frame.size.height = frame.size.height *scale;    frame.size.width = frame.size.width *scale;    frame.origin.y = (screenH - frame.size.height) * 0.5;    return frame;}#define NYRTarget 250#define NYLTarget -220/* _mainView.frame.origin.x > screenW * 0.5 定位到右邊  CGRectGetMaxX(_mainView.frame) < screenW * 0.5 定位到左邊 -220 */// 定位- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{    // 複位    if (_isDraging == NO && _mainView.frame.origin.x != 0) {        [UIView animateWithDuration:0.25 animations:^{            _mainView.frame = self.view.bounds;        }];    }    CGFloat screenW = [UIScreen mainScreen].bounds.size.width;    CGFloat target = 0;    if (_mainView.frame.origin.x > screenW * 0.5) { // 定位到右邊        target = NYRTarget;    }else if (CGRectGetMaxX(_mainView.frame) < screenW * 0.5) { // 定位到左邊        target = NYLTarget;    }    [UIView animateWithDuration:0.25 animations:^{        if (target) { // 在需要定位左邊或者右邊            // 擷取x軸位移量            CGFloat offsetX = target - _mainView.frame.origin.x;            // 設定當前主視圖的frame            _mainView.frame = [self getCurrentFrameWithOffsetX:offsetX];        }else{ // 還原            _mainView.frame = self.view.bounds;        }    }];    _isDraging = NO;}@end

ps:建立iOS交流學習群:304570962 可以加貓貓QQ:1764541256 或則znycat 讓我們一起努力學習吧。
翟乃玉的部落格
地址:http://blog.csdn.net/u013357243?viewmode=contents

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.