A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

跟着视频写的  把重复的数据放在一个方法里面了

-(void)changeData;直接在implementation里面写的  没在interface里面声明  没有报错 不明白为什么 本以为不声明就会报错的 求大神解释

090.png (135.7 KB, 下载次数: 26)

090.png

7 个回复

倒序浏览
属性也写在.m了,回去试下
回复 使用道具 举报
#import "CZAppInfoView.h"

#import "CZAppInfo.h"

@interface CZAppInfoView ()

@property (weak, nonatomic) IBOutlet UIImageView *iconView;
@property (weak, nonatomic) IBOutlet UILabel *nameView;

- (IBAction)downloadClick:(UIButton*)sender;
@end

@implementation CZAppInfoView

+ (instancetype)appInfoView
{
    NSBundle *bundle = [NSBundle mainBundle];
    CZAppInfoView *view = [[bundle loadNibNamed:@"CZAppInfoView" owner:nil options:nil] lastObject];
    return view;
}

- (void)setAppInfo:(CZAppInfo *)appInfo
{
    _appInfo = appInfo;
   
    self.nameView.text = appInfo.name;
    self.iconView.image = [UIImage imageNamed:appInfo.icon];
}

- (void)downloadClick:(UIButton *)sender
{
    sender.enabled = NO;
   
   
    UILabel *tipView = [[UILabel alloc] init];
    [self.superview addSubview:tipView];
   
    CGFloat tipW = 200;
    CGFloat tipH = 25;
    CGFloat tipX = (self.superview.frame.size.width - tipW)/2;
    CGFloat tipY = (self.superview.frame.size.height - tipH) / 2;
   
    tipView.frame = CGRectMake(tipX, tipY, tipW, tipH);
   
    tipView.text = [NSString stringWithFormat:@"%@:正在下载",self.appInfo.name];
   
    tipView.backgroundColor = [UIColor grayColor];
   
    tipView.textAlignment = NSTextAlignmentCenter;
   
    tipView.layer.cornerRadius = 5;
    tipView.layer.masksToBounds = YES;
   
    tipView.alpha = 0;
   
   
    [UIView animateWithDuration:1.0 animations:^{
        tipView.alpha = 0.9;
        
    } completion:^(BOOL finished) {
        [UIView animateWithDuration:1.0 delay:3.0 options:UIViewAnimationOptionCurveLinear animations:^{
            tipView.alpha = 0;
        } completion:^(BOOL finished) {
            [tipView removeFromSuperview];
        }];
        
    }];

}
@end
回复 使用道具 举报
#import "CZAppInfo.h"

@implementation CZAppInfo
//control + command + 上下  .m和.h之间切换
//构造方法 初始化类内部的name和icon属性
- (instancetype)initWithDic:(NSDictionary *)dic
{
    if (self = [super init]) {
        self.name = dic[@"name"];
        self.icon = dic[@"icon"];
    }
    return self;
}

//类方法,快速初始化类的对象
+ (instancetype)appInfoWithDic:(NSDictionary *)dic
{
    return [[self alloc] initWithDic:dic];
}

+ (NSArray *)appInfosList
{
    //1 获取当前应用的bundle
    NSBundle *bundle = [NSBundle mainBundle];
    //2 plist文件的路径
    NSString *path = [bundle pathForResource:@"app.plist" ofType:nil];
    //3 从plist中加载  字典数组
    NSArray *dicArray = [NSArray arrayWithContentsOfFile:path];
    //4 存储appInfo的临时数组
    NSMutableArray *appInfos = [NSMutableArray array];
    //5 遍历字典数组,取出每一个字典转换成模型
    for (NSDictionary *dic in dicArray) {
        //调用类方法快速初始化对象
        CZAppInfo *appInfo = [CZAppInfo appInfoWithDic:dic];
        //把模型添加到模型数组中
        [appInfos addObject:appInfo];
    }
    return appInfos;
}
@end
回复 使用道具 举报
我是来学知识的                          
回复 使用道具 举报
如果你在点h文件中声明的话,如果别的文件中导入了你这个,h的头文件,那么他就可以通过创建对象来调用你的方法。虽然说在扩展中定义的方法为私有方法,但是其实在扩展中的@interface中声明的话,还是可以通过别的方法来调用。
你说的应该是它没有在.m文件中的延展中声明方法。其实如果不声明,直接在@implementation实现该方法的话,也是可以的,是纯私有方法。因为它只能在类的内部通过self来调用。无法再类的外部看到和访问。
回复 使用道具 举报 1 0
yll 中级黑马 2016-4-5 08:21:22
7#
black747521 发表于 2016-4-4 18:04
如果你在点h文件中声明的话,如果别的文件中导入了你这个,h的头文件,那么他就可以通过创建对象来调用你的 ...

谢谢~ 解释的很清楚~
回复 使用道具 举报
yll 中级黑马 2016-4-7 21:59:39
8#
#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.


    CGFloat screenW = [UIScreen mainScreen].bounds.size.width;
   
    UIView *circleView = [[UIView alloc]initWithFrame:CGRectMake(0, 0,screenW , screenW)];


    circleView.backgroundColor = [UIColor yellowColor];
   
    circleView.layer.cornerRadius = screenW*0.5;
   
    [self.view addSubview:circleView];


    [self.view bringSubviewToFront:self.imageView];




}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
   
    //创建帧动画
    CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
   
    animation.keyPath = @"position";
   
    NSValue *value1 = [NSValue valueWithCGPoint:CGPointMake(10, 0)];
    NSValue *value2 = [NSValue valueWithCGPoint:CGPointMake(250, 50)];
    NSValue *value3 = [NSValue valueWithCGPoint:CGPointMake(250, 250)];
    NSValue *value4 = [NSValue valueWithCGPoint:CGPointMake(50, 250)];
   
//    数组第一个是 “开始状态” 最后一个是 "结束状态"
    animation.values = @[value1,value2,value3,value4,value1];
   
    //设置时间
    animation.duration = 5;
   
    //设置动画节奏
    //kCAMediaTimingFunctionEaseIn 先慢后快
    //kCAMediaTimingFunctionEaseOut 先快后慢
    //kCAMediaTimingFunctionLinear 线性匀速
    //kCAMediaTimingFunctionEaseInEaseOut 中间快两边慢
    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
   
   
#warning 内部的path的优先级大   values优先级小
   
    //设置路径
    CGMutablePathRef path = CGPathCreateMutable();
    CGFloat screenW = [UIScreen mainScreen].bounds.size.width;
    CGPathAddEllipseInRect(path, NULL, CGRectMake(0, 0, screenW, screenW));
   
    animation.path = path;
    //c语言的数据类型 如果creat/copy/retain创建要释放
    CFRelease(path);
    //添加动画
    [self.imageView.layer addAnimation:animation forKey:nil];
}









- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马