[
  {
    "path": "QQBtn/AppDelegate.h",
    "content": "//\n//  AppDelegate.h\n//  QQBtn\n//\n//  Created by MacBook on 15/6/25.\n//  Copyright (c) 2015年 维尼的小熊. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n\n@end\n\n"
  },
  {
    "path": "QQBtn/AppDelegate.m",
    "content": "//\n//  AppDelegate.m\n//  QQBtn\n//\n//  Created by MacBook on 15/6/25.\n//  Copyright (c) 2015年 维尼的小熊. All rights reserved.\n//\n\n#import \"AppDelegate.h\"\n\n@interface AppDelegate ()\n\n@end\n\n@implementation AppDelegate\n\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n    // Override point for customization after application launch.\n    return YES;\n}\n\n- (void)applicationWillResignActive:(UIApplication *)application {\n    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n}\n\n- (void)applicationDidEnterBackground:(UIApplication *)application {\n    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n}\n\n- (void)applicationWillEnterForeground:(UIApplication *)application {\n    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n}\n\n- (void)applicationWillTerminate:(UIApplication *)application {\n    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n}\n\n@end\n"
  },
  {
    "path": "QQBtn/Base.lproj/LaunchScreen.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"6214\" systemVersion=\"14A314h\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6207\"/>\n        <capability name=\"Constraints with non-1.0 multipliers\" minToolsVersion=\"5.1\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"iN0-l3-epB\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"480\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"  Copyright (c) 2015年 维尼的小熊. All rights reserved.\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8ie-xW-0ye\">\n                    <rect key=\"frame\" x=\"20\" y=\"439\" width=\"441\" height=\"21\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"QQBtn\" textAlignment=\"center\" lineBreakMode=\"middleTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"18\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"kId-c2-rCX\">\n                    <rect key=\"frame\" x=\"20\" y=\"140\" width=\"441\" height=\"43\"/>\n                    <fontDescription key=\"fontDescription\" type=\"boldSystem\" pointSize=\"36\"/>\n                    <color key=\"textColor\" cocoaTouchSystemColor=\"darkTextColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n            </subviews>\n            <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n            <constraints>\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"centerY\" secondItem=\"iN0-l3-epB\" secondAttribute=\"bottom\" multiplier=\"1/3\" constant=\"1\" id=\"5cJ-9S-tgC\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"kId-c2-rCX\" secondAttribute=\"centerX\" id=\"Koa-jz-hwk\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"bottom\" constant=\"20\" id=\"Kzo-t9-V3l\"/>\n                <constraint firstItem=\"8ie-xW-0ye\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"MfP-vx-nX0\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"centerX\" id=\"ZEH-qu-HZ9\"/>\n                <constraint firstItem=\"kId-c2-rCX\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"fvb-Df-36g\"/>\n            </constraints>\n            <nil key=\"simulatedStatusBarMetrics\"/>\n            <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n            <point key=\"canvasLocation\" x=\"548\" y=\"455\"/>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "QQBtn/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"7706\" systemVersion=\"14D136\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"vXZ-lx-hvc\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"7703\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"ufC-wZ-h7g\">\n            <objects>\n                <viewController id=\"vXZ-lx-hvc\" customClass=\"ViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"jyV-Pf-zRb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"2fi-mo-0CV\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"kh9-bI-dsS\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                        <subviews>\n                            <button opaque=\"NO\" contentMode=\"scaleToFill\" fixedFrame=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Cfp-TZ-qY2\" customClass=\"QQButton\">\n                                <rect key=\"frame\" x=\"57\" y=\"264\" width=\"50\" height=\"50\"/>\n                                <color key=\"backgroundColor\" white=\"0.66666666666666663\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                <state key=\"normal\" title=\"1111\">\n                                    <color key=\"titleColor\" red=\"1\" green=\"0.93703629749999995\" blue=\"0.98770377990000002\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                    <color key=\"titleShadowColor\" white=\"0.66666666666666663\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                </state>\n                            </button>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"x5A-6p-PRh\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "QQBtn/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "QQBtn/Images.xcassets/爆炸_gif/1.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"1.jpg\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "QQBtn/Images.xcassets/爆炸_gif/2.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"2.jpg\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "QQBtn/Images.xcassets/爆炸_gif/3.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"3.jpg\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "QQBtn/Images.xcassets/爆炸_gif/4.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"4.jpg\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "QQBtn/Images.xcassets/爆炸_gif/5.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"5.jpg\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "QQBtn/Images.xcassets/爆炸_gif/6.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"6.jpg\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "QQBtn/Images.xcassets/爆炸_gif/7.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"7.jpg\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "QQBtn/Images.xcassets/爆炸_gif/8.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"8.jpg\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "QQBtn/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.wayes.$(PRODUCT_NAME:rfc1034identifier)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "QQBtn/QQButton.h",
    "content": "//\n//  QQButton.h\n//  QQBtn\n//\n//  Created by MacBook on 15/6/25.\n//  Copyright (c) 2015年 维尼的小熊. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface QQButton : UIButton\n\n/** 大圆脱离小圆的最大距离 */\n@property (nonatomic, assign) CGFloat        maxDistance;\n\n/** 小圆 */\n@property (nonatomic, strong) UIView         *samllCircleView;\n\n/** 按钮消失的动画图片组 */\n@property (nonatomic, strong) NSMutableArray *images;\n\n\n@end\n"
  },
  {
    "path": "QQBtn/QQButton.m",
    "content": "//\n//  QQButton.m\n//  QQBtn\n//\n//  Created by MacBook on 15/6/25.\n//  Copyright (c) 2015年 维尼的小熊. All rights reserved.\n//\n\n#define kBtnWidth self.bounds.size.width\n#define kBtnHeight self.bounds.size.height\n\n#import \"QQButton.h\"\n\n@interface QQButton()\n\n/** 绘制不规则图形 */\n@property (nonatomic, strong) CAShapeLayer *shapeLayer;\n\n@end\n\n@implementation QQButton\n\n- (instancetype)initWithFrame:(CGRect)frame\n{\n    if (self = [super initWithFrame:frame]) {\n        [self setUp];\n    }\n    \n    return self;\n}\n\n- (void)awakeFromNib\n{\n    [self setUp];\n}\n\n//- (void)layoutSubviews\n//{\n//    [self setUp];\n//}\n\n#pragma mark - 懒加载\n- (NSMutableArray *)images\n{\n    if (_images == nil) {\n        _images = [NSMutableArray array];\n        for (int i = 1; i < 9; i++) {\n            UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@\"%d\", i]];\n            [_images addObject:image];\n        }\n    }\n    \n    return _images;\n}\n\n- (CAShapeLayer *)shapeLayer\n{\n    if (!_shapeLayer) {\n        _shapeLayer = [CAShapeLayer layer];\n        _shapeLayer.fillColor = self.backgroundColor.CGColor;\n        [self.superview.layer insertSublayer:_shapeLayer below:self.layer];\n    }\n    \n    return _shapeLayer;\n}\n\n- (UIView *)samllCircleView\n{\n    if (!_samllCircleView) {\n        _samllCircleView = [[UIView alloc] init];\n        _samllCircleView.backgroundColor = self.backgroundColor;\n        [self.superview insertSubview:_samllCircleView belowSubview:self];\n    }\n    \n    return _samllCircleView;\n}\n\n- (void)setUp\n{\n    CGFloat cornerRadius = (kBtnHeight > kBtnWidth ? kBtnWidth / 2.0 : kBtnHeight / 2.0);\n    [self setTitle:@\"100\" forState:UIControlStateNormal];\n    [self setTitleColor:[UIColor redColor] forState:UIControlStateNormal];\n    _maxDistance = cornerRadius * 4;\n\n    self.layer.masksToBounds = YES;\n    self.layer.cornerRadius = cornerRadius;\n    \n    CGRect samllCireleRect = CGRectMake(0, 0, cornerRadius * (2 - 0.5) , cornerRadius * (2 - 0.5));\n    self.samllCircleView.bounds = samllCireleRect;\n    _samllCircleView.center = self.center;\n    _samllCircleView.layer.cornerRadius = _samllCircleView.bounds.size.width / 2;\n    \n    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];\n    [self addGestureRecognizer:pan];\n    \n    [self addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];\n}\n\n#pragma mark - 手势\n- (void)pan:(UIPanGestureRecognizer *)pan\n{;\n    [self.layer removeAnimationForKey:@\"shake\"];\n\n    CGPoint panPoint = [pan translationInView:self];\n\n    CGPoint changeCenter = self.center;\n    changeCenter.x += panPoint.x;\n    changeCenter.y += panPoint.y;\n    self.center = changeCenter;\n    [pan setTranslation:CGPointZero inView:self];\n    \n    //俩个圆的中心点之间的距离\n    CGFloat dist = [self pointToPoitnDistanceWithPoint:self.center potintB:self.samllCircleView.center];\n    \n    if (dist < _maxDistance) {\n        \n        CGFloat cornerRadius = (kBtnHeight > kBtnWidth ? kBtnWidth / 2 : kBtnHeight / 2);\n        CGFloat samllCrecleRadius = cornerRadius - dist / 10;\n        _samllCircleView.bounds = CGRectMake(0, 0, samllCrecleRadius * (2 - 0.5), samllCrecleRadius * (2 - 0.5));\n        _samllCircleView.layer.cornerRadius = _samllCircleView.bounds.size.width / 2;\n        \n        if (_samllCircleView.hidden == NO && dist > 0) {\n            //画不规则矩形\n            self.shapeLayer.path = [self pathWithBigCirCleView:self smallCirCleView:_samllCircleView].CGPath;\n        }\n    } else {\n        \n        [self.shapeLayer removeFromSuperlayer];\n        self.shapeLayer = nil;\n        \n        self.samllCircleView.hidden = YES;\n    }\n    \n    if (pan.state == UIGestureRecognizerStateEnded) {\n        \n        if (dist > _maxDistance) {\n            \n            //播放销毁动画\n            [self startDestroyAnimations];\n            \n            //销毁全部控件\n            [self killAll];\n            \n        } else {\n            \n            [self.shapeLayer removeFromSuperlayer];\n            self.shapeLayer = nil;\n            \n            [UIView animateWithDuration:0.3 delay:0 usingSpringWithDamping:0.2 initialSpringVelocity:1 options:UIViewAnimationOptionCurveEaseInOut animations:^{\n                self.center = self.samllCircleView.center;\n            } completion:^(BOOL finished) {\n                self.samllCircleView.hidden = NO;\n            }];\n        }\n    }\n}\n\n#pragma mark - 俩个圆心之间的距离\n- (CGFloat)pointToPoitnDistanceWithPoint:(CGPoint)pointA potintB:(CGPoint)pointB\n{\n    CGFloat offestX = pointA.x - pointB.x;\n    CGFloat offestY = pointA.y - pointB.y;\n    CGFloat dist = sqrtf(offestX * offestX + offestY * offestY);\n    \n    return dist;\n}\n\n- (void)killAll\n{\n    [self removeFromSuperview];\n    [self.samllCircleView removeFromSuperview];\n    self.samllCircleView = nil;\n    [self.shapeLayer removeFromSuperlayer];\n    self.shapeLayer = nil;\n}\n\n#pragma mark - 不规则路径\n- (UIBezierPath *)pathWithBigCirCleView:(UIView *)bigCirCleView  smallCirCleView:(UIView *)smallCirCleView\n{\n    CGPoint bigCenter = bigCirCleView.center;\n    CGFloat x2 = bigCenter.x;\n    CGFloat y2 = bigCenter.y;\n    CGFloat r2 = bigCirCleView.bounds.size.width / 2;\n    \n    CGPoint smallCenter = smallCirCleView.center;\n    CGFloat x1 = smallCenter.x;\n    CGFloat y1 = smallCenter.y;\n    CGFloat r1 = smallCirCleView.bounds.size.width / 2;\n    \n    // 获取圆心距离\n    CGFloat d = [self pointToPoitnDistanceWithPoint:self.samllCircleView.center potintB:self.center];\n    CGFloat sinθ = (x2 - x1) / d;\n    CGFloat cosθ = (y2 - y1) / d;\n    \n    // 坐标系基于父控件\n    CGPoint pointA = CGPointMake(x1 - r1 * cosθ , y1 + r1 * sinθ);\n    CGPoint pointB = CGPointMake(x1 + r1 * cosθ , y1 - r1 * sinθ);\n    CGPoint pointC = CGPointMake(x2 + r2 * cosθ , y2 - r2 * sinθ);\n    CGPoint pointD = CGPointMake(x2 - r2 * cosθ , y2 + r2 * sinθ);\n    CGPoint pointO = CGPointMake(pointA.x + d / 2 * sinθ , pointA.y + d / 2 * cosθ);\n    CGPoint pointP = CGPointMake(pointB.x + d / 2 * sinθ , pointB.y + d / 2 * cosθ);\n    \n    UIBezierPath *path = [UIBezierPath bezierPath];\n    // A\n    [path moveToPoint:pointA];\n    // AB\n    [path addLineToPoint:pointB];\n    // 绘制BC曲线\n    [path addQuadCurveToPoint:pointC controlPoint:pointP];\n    // CD\n    [path addLineToPoint:pointD];\n    // 绘制DA曲线\n    [path addQuadCurveToPoint:pointA controlPoint:pointO];\n    \n    return path;\n}\n\n#pragma mark - button消失动画\n- (void)startDestroyAnimations\n{\n    UIImageView *ainmImageView = [[UIImageView alloc] initWithFrame:self.frame];\n    ainmImageView.animationImages = self.images;\n    ainmImageView.animationRepeatCount = 1;\n    ainmImageView.animationDuration = 0.5;\n    [ainmImageView startAnimating];\n    \n    [self.superview addSubview:ainmImageView];\n}\n\n- (void)btnClick\n{\n    [self startDestroyAnimations];\n    [self killAll];\n}\n\n#pragma mark - 设置长按时候左右摇摆的动画\n- (void)setHighlighted:(BOOL)highlighted\n{\n    [self.layer removeAnimationForKey:@\"shake\"];\n\n    //长按左右晃动的幅度大小\n    CGFloat shake = 10;\n    \n    CAKeyframeAnimation *keyAnim = [CAKeyframeAnimation animation];\n    keyAnim.keyPath = @\"transform.translation.x\";\n    keyAnim.values = @[@(-shake), @(shake), @(-shake)];\n    keyAnim.removedOnCompletion = NO;\n    keyAnim.repeatCount = MAXFLOAT;\n    //左右晃动一次的时间\n    keyAnim.duration = 0.3;\n    [self.layer addAnimation:keyAnim forKey:@\"shake\"];\n}\n\n@end\n"
  },
  {
    "path": "QQBtn/ViewController.h",
    "content": "//\n//  ViewController.h\n//  QQBtn\n//\n//  Created by MacBook on 15/6/25.\n//  Copyright (c) 2015年 维尼的小熊. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface ViewController : UIViewController\n\n\n@end\n\n"
  },
  {
    "path": "QQBtn/ViewController.m",
    "content": "//\n//  ViewController.m\n//  QQBtn\n//\n//  Created by MacBook on 15/6/25.\n//  Copyright (c) 2015年 维尼的小熊. All rights reserved.\n//\n\n#import \"ViewController.h\"\n\n@interface ViewController ()\n\n@end\n\n@implementation ViewController\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n\n    self.view.translatesAutoresizingMaskIntoConstraints = NO;\n\n}\n\n\n@end\n"
  },
  {
    "path": "QQBtn/main.m",
    "content": "//\n//  main.m\n//  QQBtn\n//\n//  Created by MacBook on 15/6/25.\n//  Copyright (c) 2015年 维尼的小熊. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "QQBtn.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tFACB35FB1B3BA0BA00148ED8 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = FACB35FA1B3BA0BA00148ED8 /* main.m */; };\n\t\tFACB35FE1B3BA0BA00148ED8 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = FACB35FD1B3BA0BA00148ED8 /* AppDelegate.m */; };\n\t\tFACB36011B3BA0BA00148ED8 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = FACB36001B3BA0BA00148ED8 /* ViewController.m */; };\n\t\tFACB36041B3BA0BA00148ED8 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = FACB36021B3BA0BA00148ED8 /* Main.storyboard */; };\n\t\tFACB36061B3BA0BA00148ED8 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FACB36051B3BA0BA00148ED8 /* Images.xcassets */; };\n\t\tFACB36091B3BA0BA00148ED8 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = FACB36071B3BA0BA00148ED8 /* LaunchScreen.xib */; };\n\t\tFACB36151B3BA0BA00148ED8 /* QQBtnTests.m in Sources */ = {isa = PBXBuildFile; fileRef = FACB36141B3BA0BA00148ED8 /* QQBtnTests.m */; };\n\t\tFACB36201B3BA0D700148ED8 /* QQButton.m in Sources */ = {isa = PBXBuildFile; fileRef = FACB361F1B3BA0D700148ED8 /* QQButton.m */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tFACB360F1B3BA0BA00148ED8 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = FACB35ED1B3BA0BA00148ED8 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = FACB35F41B3BA0BA00148ED8;\n\t\t\tremoteInfo = QQBtn;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\tFACB35F51B3BA0BA00148ED8 /* QQBtn.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = QQBtn.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tFACB35F91B3BA0BA00148ED8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tFACB35FA1B3BA0BA00148ED8 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\tFACB35FC1B3BA0BA00148ED8 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\tFACB35FD1B3BA0BA00148ED8 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\tFACB35FF1B3BA0BA00148ED8 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = \"<group>\"; };\n\t\tFACB36001B3BA0BA00148ED8 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = \"<group>\"; };\n\t\tFACB36031B3BA0BA00148ED8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tFACB36051B3BA0BA00148ED8 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = \"<group>\"; };\n\t\tFACB36081B3BA0BA00148ED8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = \"<group>\"; };\n\t\tFACB360E1B3BA0BA00148ED8 /* QQBtnTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = QQBtnTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tFACB36131B3BA0BA00148ED8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tFACB36141B3BA0BA00148ED8 /* QQBtnTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = QQBtnTests.m; sourceTree = \"<group>\"; };\n\t\tFACB361E1B3BA0D700148ED8 /* QQButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QQButton.h; sourceTree = \"<group>\"; };\n\t\tFACB361F1B3BA0D700148ED8 /* QQButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QQButton.m; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tFACB35F21B3BA0BA00148ED8 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tFACB360B1B3BA0BA00148ED8 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\tFACB35EC1B3BA0BA00148ED8 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFACB35F71B3BA0BA00148ED8 /* QQBtn */,\n\t\t\t\tFACB36111B3BA0BA00148ED8 /* QQBtnTests */,\n\t\t\t\tFACB35F61B3BA0BA00148ED8 /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFACB35F61B3BA0BA00148ED8 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFACB35F51B3BA0BA00148ED8 /* QQBtn.app */,\n\t\t\t\tFACB360E1B3BA0BA00148ED8 /* QQBtnTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFACB35F71B3BA0BA00148ED8 /* QQBtn */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFACB35FC1B3BA0BA00148ED8 /* AppDelegate.h */,\n\t\t\t\tFACB35FD1B3BA0BA00148ED8 /* AppDelegate.m */,\n\t\t\t\tFACB35FF1B3BA0BA00148ED8 /* ViewController.h */,\n\t\t\t\tFACB36001B3BA0BA00148ED8 /* ViewController.m */,\n\t\t\t\tFACB361E1B3BA0D700148ED8 /* QQButton.h */,\n\t\t\t\tFACB361F1B3BA0D700148ED8 /* QQButton.m */,\n\t\t\t\tFACB36021B3BA0BA00148ED8 /* Main.storyboard */,\n\t\t\t\tFACB36051B3BA0BA00148ED8 /* Images.xcassets */,\n\t\t\t\tFACB36071B3BA0BA00148ED8 /* LaunchScreen.xib */,\n\t\t\t\tFACB35F81B3BA0BA00148ED8 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = QQBtn;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFACB35F81B3BA0BA00148ED8 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFACB35F91B3BA0BA00148ED8 /* Info.plist */,\n\t\t\t\tFACB35FA1B3BA0BA00148ED8 /* main.m */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFACB36111B3BA0BA00148ED8 /* QQBtnTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFACB36141B3BA0BA00148ED8 /* QQBtnTests.m */,\n\t\t\t\tFACB36121B3BA0BA00148ED8 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = QQBtnTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFACB36121B3BA0BA00148ED8 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tFACB36131B3BA0BA00148ED8 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tFACB35F41B3BA0BA00148ED8 /* QQBtn */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = FACB36181B3BA0BA00148ED8 /* Build configuration list for PBXNativeTarget \"QQBtn\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tFACB35F11B3BA0BA00148ED8 /* Sources */,\n\t\t\t\tFACB35F21B3BA0BA00148ED8 /* Frameworks */,\n\t\t\t\tFACB35F31B3BA0BA00148ED8 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = QQBtn;\n\t\t\tproductName = QQBtn;\n\t\t\tproductReference = FACB35F51B3BA0BA00148ED8 /* QQBtn.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tFACB360D1B3BA0BA00148ED8 /* QQBtnTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = FACB361B1B3BA0BA00148ED8 /* Build configuration list for PBXNativeTarget \"QQBtnTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tFACB360A1B3BA0BA00148ED8 /* Sources */,\n\t\t\t\tFACB360B1B3BA0BA00148ED8 /* Frameworks */,\n\t\t\t\tFACB360C1B3BA0BA00148ED8 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tFACB36101B3BA0BA00148ED8 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = QQBtnTests;\n\t\t\tproductName = QQBtnTests;\n\t\t\tproductReference = FACB360E1B3BA0BA00148ED8 /* QQBtnTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tFACB35ED1B3BA0BA00148ED8 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0630;\n\t\t\t\tORGANIZATIONNAME = \"维尼的小熊\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tFACB35F41B3BA0BA00148ED8 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.3.2;\n\t\t\t\t\t};\n\t\t\t\t\tFACB360D1B3BA0BA00148ED8 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.3.2;\n\t\t\t\t\t\tTestTargetID = FACB35F41B3BA0BA00148ED8;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = FACB35F01B3BA0BA00148ED8 /* Build configuration list for PBXProject \"QQBtn\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = FACB35EC1B3BA0BA00148ED8;\n\t\t\tproductRefGroup = FACB35F61B3BA0BA00148ED8 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tFACB35F41B3BA0BA00148ED8 /* QQBtn */,\n\t\t\t\tFACB360D1B3BA0BA00148ED8 /* QQBtnTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tFACB35F31B3BA0BA00148ED8 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tFACB36041B3BA0BA00148ED8 /* Main.storyboard in Resources */,\n\t\t\t\tFACB36091B3BA0BA00148ED8 /* LaunchScreen.xib in Resources */,\n\t\t\t\tFACB36061B3BA0BA00148ED8 /* Images.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tFACB360C1B3BA0BA00148ED8 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tFACB35F11B3BA0BA00148ED8 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tFACB36011B3BA0BA00148ED8 /* ViewController.m in Sources */,\n\t\t\t\tFACB35FE1B3BA0BA00148ED8 /* AppDelegate.m in Sources */,\n\t\t\t\tFACB35FB1B3BA0BA00148ED8 /* main.m in Sources */,\n\t\t\t\tFACB36201B3BA0D700148ED8 /* QQButton.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tFACB360A1B3BA0BA00148ED8 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tFACB36151B3BA0BA00148ED8 /* QQBtnTests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\tFACB36101B3BA0BA00148ED8 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = FACB35F41B3BA0BA00148ED8 /* QQBtn */;\n\t\t\ttargetProxy = FACB360F1B3BA0BA00148ED8 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\tFACB36021B3BA0BA00148ED8 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tFACB36031B3BA0BA00148ED8 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFACB36071B3BA0BA00148ED8 /* LaunchScreen.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tFACB36081B3BA0BA00148ED8 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.xib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\tFACB36161B3BA0BA00148ED8 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.3;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tFACB36171B3BA0BA00148ED8 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.3;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tFACB36191B3BA0BA00148ED8 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = QQBtn/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tFACB361A1B3BA0BA00148ED8 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = QQBtn/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tFACB361C1B3BA0BA00148ED8 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = QQBtnTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/QQBtn.app/QQBtn\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tFACB361D1B3BA0BA00148ED8 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = QQBtnTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/QQBtn.app/QQBtn\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tFACB35F01B3BA0BA00148ED8 /* Build configuration list for PBXProject \"QQBtn\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tFACB36161B3BA0BA00148ED8 /* Debug */,\n\t\t\t\tFACB36171B3BA0BA00148ED8 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tFACB36181B3BA0BA00148ED8 /* Build configuration list for PBXNativeTarget \"QQBtn\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tFACB36191B3BA0BA00148ED8 /* Debug */,\n\t\t\t\tFACB361A1B3BA0BA00148ED8 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t};\n\t\tFACB361B1B3BA0BA00148ED8 /* Build configuration list for PBXNativeTarget \"QQBtnTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tFACB361C1B3BA0BA00148ED8 /* Debug */,\n\t\t\t\tFACB361D1B3BA0BA00148ED8 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = FACB35ED1B3BA0BA00148ED8 /* Project object */;\n}\n"
  },
  {
    "path": "QQBtn.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:QQBtn.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "QQBtn.xcodeproj/xcuserdata/macbook.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Bucket\n   type = \"1\"\n   version = \"2.0\">\n</Bucket>\n"
  },
  {
    "path": "QQBtn.xcodeproj/xcuserdata/macbook.xcuserdatad/xcschemes/QQBtn.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0630\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"FACB35F41B3BA0BA00148ED8\"\n               BuildableName = \"QQBtn.app\"\n               BlueprintName = \"QQBtn\"\n               ReferencedContainer = \"container:QQBtn.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"FACB360D1B3BA0BA00148ED8\"\n               BuildableName = \"QQBtnTests.xctest\"\n               BlueprintName = \"QQBtnTests\"\n               ReferencedContainer = \"container:QQBtn.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      buildConfiguration = \"Debug\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"FACB360D1B3BA0BA00148ED8\"\n               BuildableName = \"QQBtnTests.xctest\"\n               BlueprintName = \"QQBtnTests\"\n               ReferencedContainer = \"container:QQBtn.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"FACB35F41B3BA0BA00148ED8\"\n            BuildableName = \"QQBtn.app\"\n            BlueprintName = \"QQBtn\"\n            ReferencedContainer = \"container:QQBtn.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </TestAction>\n   <LaunchAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Debug\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"FACB35F41B3BA0BA00148ED8\"\n            BuildableName = \"QQBtn.app\"\n            BlueprintName = \"QQBtn\"\n            ReferencedContainer = \"container:QQBtn.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Release\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"FACB35F41B3BA0BA00148ED8\"\n            BuildableName = \"QQBtn.app\"\n            BlueprintName = \"QQBtn\"\n            ReferencedContainer = \"container:QQBtn.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "QQBtn.xcodeproj/xcuserdata/macbook.xcuserdatad/xcschemes/xcschememanagement.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>SchemeUserState</key>\n\t<dict>\n\t\t<key>QQBtn.xcscheme</key>\n\t\t<dict>\n\t\t\t<key>orderHint</key>\n\t\t\t<integer>0</integer>\n\t\t</dict>\n\t</dict>\n\t<key>SuppressBuildableAutocreation</key>\n\t<dict>\n\t\t<key>FACB35F41B3BA0BA00148ED8</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>FACB360D1B3BA0BA00148ED8</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "QQBtnTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.wayes.$(PRODUCT_NAME:rfc1034identifier)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "QQBtnTests/QQBtnTests.m",
    "content": "//\n//  QQBtnTests.m\n//  QQBtnTests\n//\n//  Created by MacBook on 15/6/25.\n//  Copyright (c) 2015年 维尼的小熊. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import <XCTest/XCTest.h>\n\n@interface QQBtnTests : XCTestCase\n\n@end\n\n@implementation QQBtnTests\n\n- (void)setUp {\n    [super setUp];\n    // Put setup code here. This method is called before the invocation of each test method in the class.\n}\n\n- (void)tearDown {\n    // Put teardown code here. This method is called after the invocation of each test method in the class.\n    [super tearDown];\n}\n\n- (void)testExample {\n    // This is an example of a functional test case.\n    XCTAssert(YES, @\"Pass\");\n}\n\n- (void)testPerformanceExample {\n    // This is an example of a performance test case.\n    [self measureBlock:^{\n        // Put the code you want to measure the time of here.\n    }];\n}\n\n@end\n"
  },
  {
    "path": "README.md",
    "content": "#README\n\n###文章链接\n\n#### [###仿手机QQ未读信息弹性动画效果,点击链接当前博客](http://www.jianshu.com/p/d5ea6c9d65fd)\n\n#####如有任何问题都可以在博客下留言，我会逐一回复\n希望小手能顺便点一下右上角的⭐️Star ^_^\n\n实现效果：\n![效果gif](http://ww3.sinaimg.cn/mw690/0068uRu1gw1etgq6hmuo7g309k0etacg.gif)\n\n![效果gif](http://ww3.sinaimg.cn/mw690/0068uRu1gw1etgq3zsdcyg309k0etwf2.gif)\n\n![效果gif](http://ww2.sinaimg.cn/mw690/0068uRu1gw1etgq3ym4h9g309k0etq4o.gif)\n\n### License\n\n本项目采用 [MIT license](http://opensource.org/licenses/MIT) 开源，你可以利用采用该协议的代码做任何事情，只需要继续继承 MIT 协议即可。\n"
  }
]