在Cycript中怎么动态修改view的frame?

直接按照OC语法给setFrame会提示错误:
throw new TypeError(“null is not an object (evaluating ‘CGRect.functionWith(CGFloat,CGFloat,CGFloat,CGFloat).pointerTo()(dlsym(RTLD_DEFAULT,“CGRectMake”)).$cyi’)”) /*
global code */

感觉是rect的定义方式不对,后来去看了Cycript的文档,按照上面的方式声明:
rect = new (struct CGRect)
&{origin:{x:0,y:0},size:{width:0,height:0}}
cy# rect->origin.x = 10
10
cy# rect->origin.y = 10
10
cy# rect->size.width = 10
10
cy# rect->size.height = 10
10
cy# rect
&{origin:{x:10,y:10},size:{width:10,height:10}}

然后把这个rect赋值给view:
cy# [#0x174188e30 setFrame:rect]

程序直接崩了,报如下错误:
*** _assert(CYRecvAll(client, &size, sizeof(size))):…/Console.cpp(274):Run

小弟真不是伸手党,找了一天了,没找到解决方法,网上的资料太少啦,求各位前辈指点一下吧~

1 个赞

rect = {0:{0:10,1:10},1:{0:10,1:10}}

非常感谢!

学习了,我也遇到这个问题了

题主,其实你也没有错。

只需要把你自己的最后一步改为就好 (*rect):

cy# [#0x174188e30 setFrame: *rect]

因为 rect = new (struct CGRect) 返回的是一个指针。