Skip to content

Instantly share code, notes, and snippets.

@gf3
Forked from maciekish/NaturalMotion.swift
Created February 29, 2016 19:35
Show Gist options
  • Save gf3/d43a4f3e254bb169a8c9 to your computer and use it in GitHub Desktop.
Save gf3/d43a4f3e254bb169a8c9 to your computer and use it in GitHub Desktop.
Easy UIInterpolatingMotionEffect. Learn more: http://hack.swic.name/easy-uiinterpolatingmotioneffect
//
// NaturalMotion.swift
//
// Created by Maciej Swic on 2014-06-06.
// Released under the MIT license.
//
import UIKit
extension UIView {
func addNaturalOnTopEffect(maximumRelativeValue : Float = 20.0) {
//Horizontal motion
var motionEffect = UIInterpolatingMotionEffect(keyPath: "center.x", type: .TiltAlongHorizontalAxis);
motionEffect.minimumRelativeValue = maximumRelativeValue;
motionEffect.maximumRelativeValue = -maximumRelativeValue;
addMotionEffect(motionEffect);
//Vertical motion
motionEffect = UIInterpolatingMotionEffect(keyPath: "center.y", type: .TiltAlongVerticalAxis);
motionEffect.minimumRelativeValue = maximumRelativeValue;
motionEffect.maximumRelativeValue = -maximumRelativeValue;
addMotionEffect(motionEffect);
}
func addNaturalBelowEffect(maximumRelativeValue : Float = 20.0) {
addNaturalOnTopEffect(maximumRelativeValue: -maximumRelativeValue)
}
}
//
// UIView+NaturalMotion.h
//
// Created by Maciej Swic on 30/04/14.
// Released under the MIT license.
//
#import <UIKit/UIKit.h>
@interface UIView (NaturalMotion)
+ (void)addNaturalOnTopEffectWithMaximumRelativeValue:(CGFloat)maximumRealtiveValue;
+ (void)addNaturalBelowEffectWithMaximumRelativeValue:(CGFloat)maximumRealtiveValue;
@end
//
// UIView+NaturalMotion.m
//
// Created by Maciej Swic on 30/04/14.
// Released under the MIT license.
//
#import "UIView+NaturalMotion.h"
@implementation UIView (NaturalMotion)
+ (void)addNaturalOnTopEffectWithMaximumRelativeValue:(CGFloat)maximumRealtiveValue {
UIInterpolatingMotionEffect* motionEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
motionEffect.minimumRelativeValue = @(maximumRealtiveValue);
motionEffect.maximumRelativeValue = @(-maximumRealtiveValue);
[self addMotionEffect:motionEffect];
motionEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis];
motionEffect.minimumRelativeValue = @(maximumRealtiveValue);
motionEffect.maximumRelativeValue = @(-maximumRealtiveValue);
[self addMotionEffect:motionEffect];
}
+ (void)addNaturalBelowEffectWithMaximumRelativeValue:(CGFloat)maximumRealtiveValue {
UIInterpolatingMotionEffect* motionEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
motionEffect.minimumRelativeValue = @(-maximumRealtiveValue);
motionEffect.maximumRelativeValue = @(maximumRealtiveValue);
[self addMotionEffect:motionEffect];
motionEffect = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis];
motionEffect.minimumRelativeValue = @(-maximumRealtiveValue);
motionEffect.maximumRelativeValue = @(maximumRealtiveValue);
[self addMotionEffect:motionEffect];
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment