5

我想知道这个应用程序是如何在 UIKit 中叠加 uiimage 和摇摆不定的。

我正在关注这个xcode:Using a UIImageView subclass with NSTimers to have images drop down in random,但是我如何捕捉它并将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 回答