美文网首页< UIKit >
UIAttachmentBehavior.h

UIAttachmentBehavior.h

作者: zhYx_ | 来源:发表于2019-02-18 13:31 被阅读1次
    
    #if USE_UIKIT_PUBLIC_HEADERS || !__has_include(<UIKitCore/UIAttachmentBehavior.h>)
    //
    //  UIAttachmentBehavior.h
    //  UIKit
    //
    //  Copyright (c) 2012-2018 Apple Inc. All rights reserved.
    //
    #import <Foundation/Foundation.h>
    #import <UIKit/UIDynamicBehavior.h>
    NS_ASSUME_NONNULL_BEGIN
    
    
    
    
    
    /* 附着行为类型 <枚举> */
    typedef NS_ENUM(NSInteger, UIAttachmentBehaviorType) {
        UIAttachmentBehaviorTypeItems,
        UIAttachmentBehaviorTypeAnchor
    } NS_ENUM_AVAILABLE_IOS(7_0);
    
    /* 运动范围 <结构体> */
    typedef struct {
        CGFloat minimum;
        CGFloat maximum;
    } UIFloatRange;
    
    UIKIT_EXTERN const UIFloatRange UIFloatRangeZero NS_AVAILABLE_IOS(9_0);
    UIKIT_EXTERN const UIFloatRange UIFloatRangeInfinite NS_AVAILABLE_IOS(9_0);
    UIKIT_EXTERN BOOL UIFloatRangeIsInfinite(UIFloatRange range) NS_AVAILABLE_IOS(9_0);
    UIKIT_EXTERN BOOL UIFloatRangeIsEqualToRange(UIFloatRange range, UIFloatRange otherRange) NS_AVAILABLE_IOS(9_0);
    
    UIKIT_STATIC_INLINE UIFloatRange UIFloatRangeMake(CGFloat minimum, CGFloat maximum) {
        return (UIFloatRange){minimum, maximum};
    }
    
    #pragma mark - 吸附类
    #pragma mark -
    /*
     - 概述
        吸附主要发生在:元素与锚点;元素与元素之间
        当元素与锚点连接,元素的运动依赖于锚点
        当元素与元素连接,两个元素的运动彼此影响
        有的吸附行为支持两个元素和一个锚点
     
        除此之外,吸附还分为:刚性吸附和弹性吸附
        刚性吸附就好像两个物体间使用固定的杆连接,运动时之间的距离不变
        而弹性吸附就好像两个物体间使用橡皮筋连接,运动时两者之间的距离会发生弹性形变
    
     */
    NS_CLASS_AVAILABLE_IOS(7_0) @interface UIAttachmentBehavior : UIDynamicBehavior
    /* 实例化 */
    // 元素和锚点之间的吸附
    /*
     元素和锚点之间像一个固定的杆进行连接,元素可以围绕锚点进行自由的旋转
     元素和锚点之间的距离不变
    */
    - (instancetype)initWithItem:(id <UIDynamicItem>)item attachedToAnchor:(CGPoint)point;
    // 元素和锚点之间的吸附
    /*
     offset参数设置元素吸附力作用点的偏移量;其他同上边的方法
     */
    - (instancetype)initWithItem:(id <UIDynamicItem>)item offsetFromCenter:(UIOffset)offset attachedToAnchor:(CGPoint)point NS_DESIGNATED_INITIALIZER;
    // 元素和元素之间的吸附
    /*
     两个元素的中心是相互附着的(UIView的center其实就是View自身的锚点位置)
     元素1和元素2之间就像有一个固定的杆连接着各自的锚点,一个作用力在一个元素上后会拖拽或者推着另一个元素,元素会自由的向四周进行旋转,但是元素1和元素2之间总是保持相同的距离
     */
    - (instancetype)initWithItem:(id <UIDynamicItem>)item1 attachedToItem:(id <UIDynamicItem>)item2;
    // 元素和元素之间的吸附
    /*
     offset1 是相对于元素1中心的偏移量
     offset2 是相对于元素2中心的偏移量
     */
    - (instancetype)initWithItem:(id <UIDynamicItem>)item1 offsetFromCenter:(UIOffset)offset1 attachedToItem:(id <UIDynamicItem>)item2 offsetFromCenter:(UIOffset)offset2 NS_DESIGNATED_INITIALIZER;
    
    /*
     item1和item2会吸附在锚点point上,而锚点point会按照axis向量指向的轴运动,从而得到一个attachment behavior对象
     item1和item2不会相对于锚点和轴旋转
     item1和item2运动的距离通过attachmentRange属性来限制
     */
    + (instancetype)slidingAttachmentWithItem:(id <UIDynamicItem>)item1 attachedToItem:(id <UIDynamicItem>)item2 attachmentAnchor:(CGPoint)point axisOfTranslation:(CGVector)axis NS_AVAILABLE_IOS(9_0);
    /*
     item会吸附在锚点point上,而锚点point会按照axis向量指向的轴运动,从而得到一个attachment behavior对象
     item不会相对于锚点和轴旋转
     item运动的距离通过attachmentRange属性来限制
     */
    + (instancetype)slidingAttachmentWithItem:(id <UIDynamicItem>)item attachmentAnchor:(CGPoint)point axisOfTranslation:(CGVector)axis NS_AVAILABLE_IOS(9_0);
    /*
     限制item1和item2之间的最大距离,从而得到一个attachment behavior对象
     item1和item2之间就像用一条绳子拴住,它们在运动中之间最大距离为绳子的长度
     offset1和offset2同上文中的作用力点偏移量
     item1和item2之间的最大距离的初始值为item1和item2初始位置间的距离,后续可以通过length属性修改
     */
    + (instancetype)limitAttachmentWithItem:(id <UIDynamicItem>)item1 offsetFromCenter:(UIOffset)offset1 attachedToItem:(id <UIDynamicItem>)item2 offsetFromCenter:(UIOffset)offset2 NS_AVAILABLE_IOS(9_0);
    /*
     通过将item1和item2固定到锚点point上,得到一个attachment behavior对象
     item1、item2和锚点point之间的相对位置在运动中是不会发生变化的,就好像三者之间被木棍固定成为一个单元
     */
    + (instancetype)fixedAttachmentWithItem:(id <UIDynamicItem>)item1 attachedToItem:(id <UIDynamicItem>)item2 attachmentAnchor:(CGPoint)point NS_AVAILABLE_IOS(9_0);
    /*
     通过将item1和item2固定到锚点point上,得到一个attachment behavior对象
     item1和item2就像通过木棍固定到锚点point上,但是item1和item2可以围绕锚点以固定半径旋转,并且item1和item2之间不发生碰撞,item1和item2的旋转同时受frictionTorque旋转力矩属性和锚点运动影响
     frictionTorque值改变必须在任何一个item旋转之前进行设置。当frictionTorque值为0时,item1和item2响应任何自由旋转脉冲
     利用attachmentRange属性设置旋转的数量
     */
    + (instancetype)pinAttachmentWithItem:(id <UIDynamicItem>)item1 attachedToItem:(id <UIDynamicItem>)item2 attachmentAnchor:(CGPoint)point NS_AVAILABLE_IOS(9_0);
    
    // 获取 所有的item
    @property (nonatomic, readonly, copy) NSArray<id <UIDynamicItem>> *items;
    // 获取 附着行为类型
    @property (readonly, nonatomic) UIAttachmentBehaviorType attachedBehaviorType;
    // 设置 锚点(默认:CGPointZero)
    @property (readwrite, nonatomic) CGPoint anchorPoint;
    // 设置 距离(两个附件point之间的距离)
    @property (readwrite, nonatomic) CGFloat length;
    // 设置 阻尼系数(产生弹跳的时候的衰减值;默认:1)
    @property (readwrite, nonatomic) CGFloat damping;
    // 设置 震荡频率
    @property (readwrite, nonatomic) CGFloat frequency;
    // 设置 需要克服围绕一个锚点进行旋转的力的大小(值越大阻力越大;默认:0.0)
    @property (readwrite, nonatomic) CGFloat frictionTorque NS_AVAILABLE_IOS(9_0);
    // 设置 运动范围(默认:UIFloatRangeInfinite)
    @property (readwrite, nonatomic) UIFloatRange attachmentRange NS_AVAILABLE_IOS(9_0);
    @end
    
    
    
    
    
    NS_ASSUME_NONNULL_END
    
    #else
    #import <UIKitCore/UIAttachmentBehavior.h>
    #endif
    
    

    相关文章

      网友评论

        本文标题:UIAttachmentBehavior.h

        本文链接:https://www.haomeiwen.com/subject/oqjaeqtx.html