如何在ios中实现像商店一样的动画?

时间:2015-09-08 05:09:52

标签: ios objective-c uitableview animation

大家好,我必须在我的项目中实现像动画一样的仓库。我发现了第三方图书馆,但很抱歉它很快。请帮我解决客观的c代码

动画的参考链接

Animation Store house

3 个答案:

答案 0 :(得分:1)

<强> StoreTableView.h

#import <UIKit/UIKit.h>
@protocol StoreHouseTableViewTransform


@property (nonatomic) CGFloat scaleValue;
-(void)transFormForCell:(CGFloat)scaleFactor;

@end

@interface StoreTableView : UITableView

@end

<强> StoreTableView.m

#import "StoreTableView.h"

@implementation StoreTableView


-(void)layoutSubviews{
[super layoutSubviews];
[self transformTable];
}

- (void )transformTable{

for (NSIndexPath *indexpath in self.indexPathsForVisibleRows) {
    UITableViewCell *cell = [self cellForRowAtIndexPath:indexpath];

    if ([cell conformsToProtocol:@protocol(StoreHouseTableViewTransform)]) {

        UITableViewCell <StoreHouseTableViewTransform> *vc = (UITableViewCell<StoreHouseTableViewTransform> *)cell;
        CGFloat distCenter=[self computeDistance:indexpath];
        [vc transFormForCell:[self computeScale:distCenter withMinScale:vc.scaleValue]];
    }
}

}


-(CGFloat )computeDistance:(NSIndexPath *)indexpath{
CGRect rect=[self rectForRowAtIndexPath:indexpath];
CGFloat cellCenter=rect.origin.y + rect.size.height/2;
CGFloat cellContentCenter=self.contentOffset.y + self.bounds.size.height/2;

return fabs(cellCenter - cellContentCenter);
}

-(CGFloat )computeScale:(CGFloat)distanceOfCenter withMinScale:(CGFloat)scaleFactor{

return (1.0-scaleFactor) * distanceOfCenter / self.bounds.size.height;
}
@end

<强> StoreTableViewCell.h

#import <UIKit/UIKit.h>

#import "StoreTableView.h"

@interface StoreTableViewCell : UITableViewCell<StoreHouseTableViewTransform>{
CGFloat minimumScale;
}

@property (weak, nonatomic) IBOutlet UIView *backView;
@property (weak, nonatomic) IBOutlet UIImageView *scaleImage;

@end

<强> StoreTableViewCell.m

#import "StoreTableViewCell.h"

@implementation StoreTableViewCell
@synthesize scaleValue;

-(void )prepareForReuse{
[super prepareForReuse ];
minimumScale = 0.85;
self.backView.transform = CGAffineTransformMakeScale(minimumScale, minimumScale);

}

#pragma mark delegate

-(void)transFormForCell:(CGFloat)scaleFactor{
self.backView.transform = CGAffineTransformMakeScale(1.0 - scaleFactor, 1.0 - scaleFactor);
} 
@end

这是StoreHouse Animation的Objective-C实现 将TableView与StoreTableView和Cell与StoreTableViewCell子类化。 我想也是如此,这对你有帮助 玩scaleFactor

答案 1 :(得分:0)

我花了大约4个小时尝试在基于Xcode Objc的项目中启用Swift。我的&#34; myproject-Swift.h&#34;文件创建成功,但我的Xcode没有看到我的Swift类。所以我决定创建一个新的基于Xcode Objc的项目,最后我找到了正确的答案!希望这篇文章能帮助某人:-) 基于Xcode Objc的项目的逐步快速集成:

1.创建新的* .swift文件(在Xcode中)或使用Finder添加它 2.如果Xcode之前没有这样做,请添加快速桥接空标题(参见下面的4) 3.使用@objc属性实现你的Swift类:

import UIKit

@objc class Hello : NSObject {
    func sayHello () {
        println("Hi there!")
    }
}

4.打开构建设置并检查以下参数: 产品模块名称:myproject 定义模块:是 嵌入式内容包含Swift:是的 安装Objective-C兼容性标头:是 Objective-C桥接标题:$(SRCROOT)/Sources/SwiftBridging.h 5.在* .m文件中导入标题(由Xcode自动生成)

#import "myproject-Swift.h"

6。清理并重建您的Xcode项目

  1. 利润

答案 2 :(得分:0)

他们开源了他们的动画引擎。建立在CADisplayLink之上,他们主要推荐这个,如果你想要做与手势交互的基于物理的动画。 https://github.com/storehouse/Advance