3

画面のすべてのサイズであるいくつかのビューの間に垂直視差スクロール効果を追加しようとしています。

これはボタンで行う場合はそれほど複雑ではありませんでしたが、iOS のYear Walk Companion アプリと同様に、UIPanGesture で制御したいと考えています。ここに示されている現在の方程式は正しく機能しません。

現在、このバージョンは最初の 2 つのビューのみを移動します。これらが機能するようになると、残りは簡単になるはずです。また、特定のビューが特定の方向に移動するのを止めるすべてのチェックも含めていません。これも問題とは関係がないためです。

これは、ボタンで動作する Web バージョンです: http://flycarpodacus.zxq.net/iPhone%20Parallax/event.html

誰かが助けてくれることを願っています。

ViewController.h

@interface ViewController : UIViewController {
    UIPanGestureRecognizer *panGesture;
    int activeView;
    int nextView;
    float offset;
    float speed;

}
@property (weak, nonatomic) IBOutlet UIView *view1;
@property (weak, nonatomic) IBOutlet UIView *view2;
@property (weak, nonatomic) IBOutlet UIView *view3;
@property (weak, nonatomic) IBOutlet UIView *view4;

ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize view1, view2, view3, view4;
- (void)viewDidLoad
{
    [super viewDidLoad];
    activeView = 1;
    offset = 220;
    speed = 1;
    panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];

    [self.view addGestureRecognizer:panGesture];

    if (self.view.frame.size.height != 568) {
        CGRect frame = self.view.frame;
        frame.size.height = self.view.frame.size.height;
        view1.frame = frame;
        view2.frame = frame;
        view3.frame = frame;
        view4.frame = frame;
    }

    view4.center = CGPointMake(view4.center.x, self.view.frame.size.height/2 + offset);
    view3.center = CGPointMake(view3.center.x, self.view.frame.size.height/2 + offset);
    view2.center = CGPointMake(view2.center.x, self.view.frame.size.height/2 + offset);
    view1.center = CGPointMake(view1.center.x, self.view.frame.size.height/2);
}
- (void)handlePanGesture:(UIPanGestureRecognizer *)panGestureRecognizer {
    CGPoint panGestureTranslation = [panGestureRecognizer translationInView:self.view];

    switch (activeView) {
        case 1:
            view1.center = CGPointMake(view1.center.x, panGestureTranslation.y + self.view.frame.size.height/2);
            view2.center = CGPointMake(view2.center.x, view2.center.y - 2.5f);
            break;

        default:
            break;
    }
}
4

2 に答える 2

-1

詳細な説明とオープンソースの実装を含む視差効果に関する記事を確認することをお勧めします => http://blog.denivip.ru/index.php/2013/08/parallax-in-ios-applications/?lang=en

于 2013-08-05T11:51:14.543 に答える