Я пытаюсь сделать UIView, который может иметь подобное поведение, такое как центр управления iOS. Мой текущий код способен делать подтягивание, чтобы показать и спрятаться, чтобы спрятаться.UIView Bouncing как iOS Control Center
#define kViewMaxHeight 600
#define kViewMinHeight 300
#define kViewWidth [[UIScreen mainScreen] bounds].size.width
#define kViewDefaultX 0
#define kScreenHeight [[UIScreen mainScreen] bounds].size.height
- (void)swipeView:(id)sender {
CGPoint location = [(UIPanGestureRecognizer *)sender locationInView:self];
CGPoint translatedPoint = [(UIPanGestureRecognizer *)sender translationInView:self];
CGPoint velocity = [(UIPanGestureRecognizer *)sender velocityInView:self];
NSLog(@"x:%.2f, y:%.2f", location.x, location.y);
if([(UIPanGestureRecognizer *)sender state] == UIGestureRecognizerStateBegan) {
firstX = [self center].x;
firstY = [self center].y;
}
translatedPoint = CGPointMake(firstX, firstY+translatedPoint.y);
// Dragged Up
if (velocity.y < 0) {
if (self.frame.origin.y + self.frame.size.height > kScreenHeight) {
[self setCenter:translatedPoint];
}
else {
}
}
// Dragged Down
else {
[self setCenter:translatedPoint];
}
//
if (self.frame.origin.y + self.frame.size.height < kScreenHeight) {
CGRect frame = self.frame;
frame.origin.y = kScreenHeight - kViewMinHeight;
self.frame = frame;
}
if ([(UIPanGestureRecognizer *)sender state] == UIGestureRecognizerStateEnded) {
if (velocity.y < 0 || location.y < 0) {
CGRect frame = self.frame;
frame.origin.y = kScreenHeight - kViewMinHeight;
self.frame = frame;
}
else {
CGRect frame = self.frame;
frame.origin.y = kScreenHeight - 50;
frame.size.height = kViewMinHeight;
self.frame = frame;
}
}
}
Демо:
Вопрос 1: Может кто-нибудь дать несколько примеров, или руководство, как я могу добиться этого?
Вопрос 2 (Какой-то глупый вопрос здесь): Как реализован iOS Control Center? Используется ли UIViewController или UIView?
Центр управления является, скорее всего, ни UIView, ни UIViewController, это, вероятно, просто зашиты в IOS –