Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how do I stack the UIImage together and wavering or swing in UIKit

I would like to know how this app stacks up uiimage and wavering in UIKit.

I'm following this xcode: Using a UIImageView subclass with NSTimers to have images dropping down in random, but how do I catch it and stack the UIImage together ?

enter image description here

Thanks for the reply... EDIT: for clarity

https://www.youtube.com/watch?v=2dpZCoi4xFk 40sec onwards will show how it stack on top each other and swing with accerometer

This will emulate the dropping of 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]);

}

Thanks for reading and commenting.

like image 530
Desmond Avatar asked Oct 21 '22 20:10

Desmond


1 Answers

For stacking, just make a UIView that holds all the placed images together.

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

For tilting, set up an accelerometer and use the x and y to determine the tilt.

-(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]

}

More info on Motion Events

For the collision detection, you can probably do something like

if (CGRectIntersectsRect([[[stackView subviews] lastObject] frame], fallingView.frame))
    [self addView: fallingView toStack: stackView];
like image 75
Krys Jurgowski Avatar answered Oct 31 '22 18:10

Krys Jurgowski