效果

源码:https://github.com/youxianming/ios-project-examples 中的 sideviewcontroller
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
//
// viewcontroller.m
// sideviewcontroller
//
// created by youxianming on 16/6/6.
// copyright © 2016年 youxianming. all rights reserved.
//
#import "viewcontroller.h"
#import "leftviewcontroller.h"
#import "mainviewcontroller.h"
#import "uiview+setrect.h"
@interface viewcontroller () {
cgfloat _screenwidth;
}
@property (nonatomic, strong) uipangesturerecognizer *pangesture;
@property (nonatomic) cgpoint panbeginpoint;
@property (nonatomic, strong) leftviewcontroller *leftviewcontroller;
@property (nonatomic, strong) uiview *leftview;
@property (nonatomic, strong) mainviewcontroller *mainviewcontroller;
@property (nonatomic, strong) uiview *mainview;
@end
@implementation viewcontroller
- (void)viewdidload {
[super viewdidload];
// init some value.
_screenwidth = width;
// add backgroundview.
uiimageview *backgroundview = [[uiimageview alloc] initwithframe:self.view.bounds];
backgroundview.image = [uiimage imagenamed:@"back"];
[self.view addsubview:backgroundview];
// leftviewcontroller
self.leftviewcontroller = [[leftviewcontroller alloc] init];
self.leftview = self.leftviewcontroller.view;
[self.view addsubview:self.leftview];
// mainviewcontroller
self.mainviewcontroller = [[mainviewcontroller alloc] init];
self.mainview = self.mainviewcontroller.view;
[self.view addsubview:self.mainview];
// pan gesture.
self.pangesture = [[uipangesturerecognizer alloc] initwithtarget:self action:@selector(pangestureevent:)];
[self.mainview addgesturerecognizer:self.pangesture];
}
- (void)pangestureevent:(uipangesturerecognizer *)gesture {
cgpoint translation = [gesture translationinview:gesture.view];
cgpoint velocity = [gesture velocityinview:gesture.view];
cgfloat gap = _screenwidth / 3.f * 2;
cgfloat sensitiveposition = _screenwidth / 2.f;
if (velocity.x < 0 && _mainview.x <= 0) {
// 过滤掉向左侧滑过头的情形
_mainview.x = 0.f;
} else {
if (gesture.state == uigesturerecognizerstatebegan) {
// 开始
_panbeginpoint = translation;
if (_mainview.x >= sensitiveposition) {
_panbeginpoint.x -= gap;
}
} else if (gesture.state == uigesturerecognizerstatechanged) {
// 值变化
_mainview.x = translation.x - _panbeginpoint.x;
if (_mainview.x <= 0) {
// 过滤掉向左侧滑过头的情形
_mainview.x = 0.f;
}
} else if (gesture.state == uigesturerecognizerstateended) {
// 结束
[uiview animatewithduration:0.20f animations:^{
_mainview.x >= sensitiveposition ? (_mainview.x = gap) : (_mainview.x = 0);
}];
}
}
}
@end
|

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。








发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。