Code Monkey home page Code Monkey logo

Comments (4)

youngsoft avatar youngsoft commented on May 17, 2024

原因是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也是具有相同的方法属性的。

from mylinearlayout.

miyazaki2048 avatar miyazaki2048 commented on May 17, 2024

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

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

from mylinearlayout.

youngsoft avatar youngsoft commented on May 17, 2024

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

from mylinearlayout.

miyazaki2048 avatar miyazaki2048 commented on May 17, 2024

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

from mylinearlayout.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.