1

iOS コントロール センターと同様の動作ができる UIView を作成しようとしています。私の現在のコードは、プルアップして表示し、プルダウンして非表示にすることができます。

#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;
    }
}
}

デモ: マイプログラム iOS コントロール センター

質問 1: 誰かが例を挙げたり、これを達成する方法を説明したりできますか?

質問 2 (ここにいくつかの愚かな質問): iOS コントロール センターはどのように実装されていますか? UIViewController または UIView を使用していますか?

4

2 に答える 2