5

このアプリがUIKitでuiimageと揺らぎをどのように積み重ねているのか知りたいです。

私はこのxcodeをフォローしています:NSTimersでUIImageViewサブクラスを使用 して画像をランダムにドロップダウンしますが、それをキャッチしてUIImageをスタックするにはどうすればよいですか?

ここに画像の説明を入力してください

返信ありがとうございます...編集:明確にするために

https://www.youtube.com/watch?v=2dpZCoi4xFk 40秒以降は、スタックがどのように重なり合い、加速度計でスイングするかを示します。

これにより、UIIimageViewのドロップがエミュレートされます

- (void)viewDidLoad {
    [super viewDidLoad];

    // set the background color to something COLD
    self.view.backgroundColor = [UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:1.0];

    // load our ph image we will use the same image over and over
    phImage = [UIImage imageNamed:@"placeholder.png"];

    // start a timet that will fire 1 times per second
    [NSTimer scheduledTimerWithTimeInterval:(1) target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
}

// Timer event is called whenever the timer fires
- (void)onTimer
{
    // build a view from our ph image
    UIImageView* placeholderView = [[UIImageView alloc] initWithImage:phImage];

    // use the random() function to randomize up our ph attributes
    //int startX = round(random() % 300);
    int startX = round(random() % 275);
    //int endX = round(random() % 300);
    int endX = startX;

    double scale = 1 / round(random() % 100) + 1.0;
    double speed = 1 / round(random() % 50) + 1.0;

    // set the PH start position
    phView.frame = CGRectMake(startX, -100.0, 25.0 * scale, 25.0 * scale);
    phView.alpha = 0.25;

    // put the ph in our main view
    [self.view addSubview:phView];

    [UIView beginAnimations:nil context:phView];
    // set up how fast the ph will fall
    [UIView setAnimationDuration:5 * speed];

    // set the postion where ph will move to
    phView.frame = CGRectMake(endX, 500.0, 25.0 * scale, 25.0 * scale);

    // set a stop callback so we can cleanup the ph when it reaches the
    // end of its animation
    [UIView setAnimationDidStopSelector:@selector(onAnimationComplete:finished:context:)];
    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];

}
- (void)onAnimationComplete:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {

    UIImageView *phView = context;
    [phView removeFromSuperview];
    NSLog(@"[phView retainCount] = %d",[phView retainCount]);

}

読んでコメントしてくれてありがとう。

4

1 に答える 1

3

スタックするには、配置されたすべての画像をまとめて保持する UIView を作成するだけです。

UIView *stackView = [UIView new];

-(void) addView: (UIView*) view toStack: (UIView*) stackView
{

    if ([stackView subviews].count > 0)
    {
        CGRect frame = [[[stackView subviews] lastObject] frame];
        view.frame = CGRectOffset(frame, 0, 20);
    }
    [stackView addSubview:view];
}

傾斜の場合は、加速度計をセットアップし、x と y を使用して傾斜を決定します。

-(void)configureAccelerometer
{
    UIAccelerometer*  theAccelerometer = [UIAccelerometer sharedAccelerometer];
    theAccelerometer.updateInterval = 0.20;

    theAccelerometer.delegate = self;
    // Delegate events begin immediately.
}

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
    UIAccelerationValue x, y, z;
    x = acceleration.x;
    y = acceleration.y;

    //[stackView tiltForX: x Y: y]

}

モーションイベントの詳細

衝突検出のために、おそらく次のようなことができます

if (CGRectIntersectsRect([[[stackView subviews] lastObject] frame], fallingView.frame))
    [self addView: fallingView toStack: stackView];
于 2013-01-12T18:13:52.647 に答える