Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于View的MyLayoutExtInnerCategory里的一个疑惑 #45

Closed
miyazaki2048 opened this issue Jul 21, 2017 · 4 comments
Closed

关于View的MyLayoutExtInnerCategory里的一个疑惑 #45

miyazaki2048 opened this issue Jul 21, 2017 · 4 comments

Comments

@miyazaki2048
Copy link

miyazaki2048 commented Jul 21, 2017

为什么返回值要强转UIView?@youngsoft

-(instancetype)myBestSizeClass:(MySizeClass)sizeClass
...
  return (UIView*)myClass;
@youngsoft
Copy link
Owner

原因是myClass其实并不是一个UIView对象,而是一个MyViewSizeClass,你会发现MyViewSizeClass里面的很多方法和属性都和UIView(MyLayoutExt)扩展属性是一致的。然后这里面就使用了一个小技巧当你获取一个SizeClass时,然后对他使用你就可以像普通使用视图一样来对某个sizeclass下面的属性进行设置。比如下面的例子:

UIView *v1 = [self createView:[CFTool color:5] title:@"A"];
    v1.myHeight = 100;
    [v1 fetchLayoutSizeClass:MySizeClass_Landscape].myWidth = 100;
    [self.testLayout addSubview:v1];
   
    UIView *v2 = [self createView:[CFTool color:6] title:@"B"];
    v2.myHeight = 50;
    [v2 fetchLayoutSizeClass:MySizeClass_Landscape].myWidth = 50;
    [self.testLayout addSubview:v2];

    UIView *v3 = [self createView:[CFTool color:7] title:@"C"];
    [v3 fetchLayoutSizeClass:MySizeClass_Landscape].myWidth = 70;
    v3.myHeight = 70;
    [self.testLayout addSubview:v3];

你会发现视图本身可以使用myHeight。然后对应的sizeclass也是具有相同的方法属性的。

@miyazaki2048
Copy link
Author

谢谢解答,确实比较巧妙。

不过让XXSizeClass和UIView共同实现MyViewProtocol,MyFloatLayoutViewProtcol……,约束两者的属性是不会更好?

@youngsoft
Copy link
Owner

很好的建议,看来阁下对框架设计这块还有很有见解的。您的这个想法在swift版本TangramKit中就是按这样来设计的。至于OC版本原先也是想按这样来设计的,后来因为嫌协议的定义麻烦。而且OC并不是强类型校验的,所以就取巧维持了现在的样子。

@miyazaki2048
Copy link
Author

👌好的 谢谢写这个项目哈哈 有问题下次再请假

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants