`
jsntghf
  • 浏览: 2533520 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

UIView添加UIMotionEffect效果

    博客分类:
  • iOS
阅读更多

(1)UIView+MotionEffect.h

#import <UIKit/UIKit.h>

@interface UIView (MotionEffect)

@property (nonatomic, strong) UIMotionEffectGroup *effectGroup;

- (void)addXAxisWithValue:(CGFloat)xValue YAxisWithValue:(CGFloat)yValue;
- (void)removeSelfMotionEffect;

@end

 

(2)UIView+MotionEffect.m

#import "UIView+MotionEffect.h"
#import <objc/runtime.h>

static char motionEffectFlag;

@implementation UIView (MotionEffect)

- (void)setEffectGroup:(UIMotionEffectGroup *)effectGroup {
    // 清除关联
    objc_setAssociatedObject(self, &motionEffectFlag, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    
    // 建立关联
    objc_setAssociatedObject(self, &motionEffectFlag, effectGroup, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (UIMotionEffectGroup *)effectGroup {
    // 返回关联
    return objc_getAssociatedObject(self, &motionEffectFlag);
}

- (void)addXAxisWithValue:(CGFloat)xValue YAxisWithValue:(CGFloat)yValue {  
    if ((xValue >= 0) && (yValue >= 0)) {
        UIInterpolatingMotionEffect *xAxis = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
        xAxis.minimumRelativeValue = @(-xValue);
        xAxis.maximumRelativeValue = @(xValue);
        
        UIInterpolatingMotionEffect *yAxis = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis];
        yAxis.minimumRelativeValue = @(-yValue);
        yAxis.maximumRelativeValue = @(yValue);
        
        // 先移除效果再添加效果
        self.effectGroup.motionEffects = nil;
        [self removeMotionEffect:self.effectGroup];
        self.effectGroup.motionEffects = @[xAxis, yAxis];
        
        // 给view添加效果
        [self addMotionEffect:self.effectGroup];
    }
}

- (void)removeSelfMotionEffect {
    [self removeMotionEffect:self.effectGroup];
}

@end

 

(3)调用示例

- (void)viewDidLoad {
    [super viewDidLoad];
    
    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"flower"]];
    imageView.center = self.view.center;
    [self.view addSubview:imageView];
    
    imageView.effectGroup = [UIMotionEffectGroup new];
    [imageView addXAxisWithValue:15.f YAxisWithValue:15.f];
}

 

分享到:
评论

相关推荐

    ios-UIView添加弹簧效果.zip

    "ios-UIView添加弹簧效果.zip"这个压缩包文件显然是一个关于如何在iOS应用中为UIView添加弹簧效果的示例项目。下面,我们将详细探讨这个知识点。 首先,弹簧效果(Spring Animation)是UIKit提供的动画类型之一,它...

    6个UIView的弹簧效果布局,添加点击实现

    本教程将深入探讨如何实现6个`UIView`的弹簧效果布局,并添加点击事件,让它们在用户触摸时有动态的弹性反馈。 首先,我们需要了解`UIView`的弹簧效果,这通常通过`UIKit Dynamics`框架来实现。`UIKit Dynamics`是...

    swift-Fireworks-为UIView添加烟花动画效果

    为了给用户带来更丰富的视觉体验,开发者有时会为UIView添加各种动态效果,比如烟花动画。"swift-Fireworks-为UIView添加烟花动画效果"这个项目就是这样一个例子,它展示了如何在Swift中创建逼真的烟花绽放效果。 ...

    swift-Twinkle-✨一个Swift和简单的方法能让任何UIView产生闪烁效果

    在Swift编程语言中,开发者经常会遇到需要为UI元素添加各种动态效果的需求,以提升用户体验。其中一个常见的效果就是“闪烁”,这种视觉效果可以吸引用户的注意力或者作为加载提示。"Twinkle"是一个专门针对这种情况...

    ios-为UIView添加未读消息红点.zip

    在iOS开发中,经常需要为应用的视图(UIView)添加未读消息提示,例如App图标右上角的红点。这个"ios-为UIView添加未读消息红点.zip"项目提供了一个解决方案,通过开源库Yeebadge实现。开发者Mr-yuwei在GitHub上分享...

    自定义 UIView的阴影效果

    在iOS开发中,自定义UIView的阴影效果是一个常见的需求,它可以为UI元素增添层次感和专业性。在本文中,我们将深入探讨如何实现这个功能,包括设置阴影颜色、阴影偏移、阴影透明度以及阴影半径等关键参数。 首先,...

    swift-使用Swfit扩展为UIView添加随UIScrollView滚动产生视差效果

    在Swift中,我们可以利用扩展(Extension)来为现有的UIView类添加新的功能,例如实现随UIScrollView滚动的视差效果。这个"swift-使用Swift扩展为UIView添加随UIScrollView滚动产生视差效果"的主题主要涵盖了以下...

    iOS实现UIView渐变效果

    本文将深入探讨如何在iOS中实现UIView的渐变效果,并介绍一个已经封装好的解决方案,允许开发者轻松地在应用中添加渐变色。 首先,我们需要理解渐变色的基本概念。渐变色是指从一种颜色平滑过渡到另一种颜色的过程...

    UIView 震动动画效果 AFViewShaker.zip

    UIView 震动动画效果 AFViewShaker ,AFViewShaker 是一个简单的工具用来执行 。 使用方法: AFViewShaker *...

    ios UIView翻转动画效果

    在iOS开发中,UIView的动画效果是提升用户体验的重要手段之一,尤其在视图切换时,翻转动画可以带来富有立体感和平滑过渡的视觉效果。本主题将详细讲解如何实现"ios UIView翻转动画效果",以及如何在实际项目中应用...

    UIView-Parallaxify:UIView类别可向UIView添加视差效果

    "UIView-Parallaxify"是一个Objective-C库,专门为UIView类添加了视差滚动效果。这种效果通常在用户滚动屏幕时,背景元素以较慢的速度移动,与前景元素形成对比,从而营造出3D空间的错觉。 1. **Objective-C语言...

    swift-RKNotificationHub为任何UIView添加一个通知角标

    Swift开发中的`RKNotificationHub`库是一个非常实用的工具,它允许开发者轻松地在任何`UIView`上添加类似iOS系统应用图标的红色通知角标。这个库特别适用于那些需要显示未读消息计数或者更新提示的自定义视图组件。...

    Swift 2.1 为 UIView 添加点击事件和点击效果

    接下来,我们探讨如何为`UIView`添加点击效果。`UIView`本身并没有内置的点击反馈机制,所以我们需要自定义视图类或扩展来实现。下面是一个名为`UIViewEffect`的类,它重写了`touchesBegan`、`touchesCancelled`和`...

    ios UIView或者UIViewController缩放动画效果

    在iOS开发中,实现视图(UIView)或控制器(UIViewController)的缩放动画效果是常见的交互设计,可以增强用户体验并使界面更具动态美感。这里我们将深入探讨如何在iOS应用中创建这种效果,以及如何通过自定义Dome...

    swift-MCUIViewLayout通过UIView添加的类别可轻松构建布局

    3. **灵活性**:`MCUIViewLayout`允许你在运行时动态地添加、修改或删除布局规则。这使得它在处理响应式设计或不同屏幕尺寸时特别有用。 4. **性能优化**:由于`MCUIViewLayout`是在UIKit的布局系统之上构建的,它...

    swift-DBCorner为基于UIView的视图添加高性能圆角

    Swift-DBCorner是一款高效能的库,用于在Swift中为UIView添加圆角效果。这个库的设计目的是简化开发者的工作,只需一行代码,就可以轻松地为任何视图赋予圆角,同时还可以选择性地设置四个角的圆润程度以及添加描边...

    UIView/UIButton任意添加某个边框

    在实际应用中,我们有时需要对这些控件进行自定义样式设置,比如添加特定的边框来突出视觉效果。本篇文章将详细讲解如何通过编程方式为`UIView`和`UIButton`添加任意边框,包括边框的大小、颜色以及实现的技巧。 ...

    UIView切换效果集 HMGLTransitions.zip

    UIView切换效果集 HMGLTransitions ,HMGLTransitions 实现了一组不同的 UIView 之间切换效果的功能。

    ios-UIView加手势方法拓展..zip

    本教程将深入探讨如何使用扩展(Extension)和运行时(Runtime)技术,为UIView类添加手势识别功能,从而实现更丰富的用户交互体验。 首先,让我们了解什么是扩展。在Objective-C和Swift中,扩展是一种可以为已存在...

Global site tag (gtag.js) - Google Analytics