标签: setneedsdisplay

我什么时候需要在iOS中调用setNeedsDisplay?

在创建iOS应用程序时,我很困惑何时需要调用setNeedsDisplay?我知道它与更新/重绘UI有关; 但是,每当我改变任何观点时,是否需要调用它?

例如,我是否需要调用它:

  • 以编程方式更改文本字段中的文本
  • 更改视图的背景时?
  • 当我在viewDidLoad中进行更改时?
  • 在viewDidAppear中怎么样?

有人可以给我一些关于何时使用这种方法的一般指导原则吗?

objective-c uiview ios setneedsdisplay swift

65
推荐指数
3
解决办法
4万
查看次数

setNeedsLayout和setNeedsDisplay

UIView方法setNeedsLayout和真正的区别是什么setNeedsDisplay

像往常一样,文档对此很有雾.

ios setneedsdisplay autolayout

65
推荐指数
1
解决办法
3万
查看次数

SetNeedsDisplay不起作用

我看到很多线程与这个问题有关,但没有一个解决我的问题(我认为).

我的情况应该很简单,UIView我的控制器中有一个Custom ,从我的控制器,我使用[ self.myView setNeedsDisplay],它完美地工作.

当我试图从内部调用它时,我遇到了问题UIView...我从另一个类发送了一个通知,我的View(这个工作)收到了它传递的信息,我更新内部这个视图的属性,而不是我所谓的[自我setNeedsDisplay]希望我的屏幕更新与新状态,但没有发生任何事情,我NSLOG在我的drawRec方法中使用了一个内部,并且它此时没有被调用,它只是当我的控制器类调用时调用setNeedsDisplay,当发生这种情况时,之前应该发生的更新显示在屏幕上...我不知道为什么它之前没有更新...

这是一些代码:

我的控制器要求更新:(工作正常!)

- (void)addNodeToNetwork:(DTINode *)node
{
[self.myNetwork addNodeInTheNetwork:node];
self.gridView.nodesToDraw = [self.myNetwork.nodesInNetwork copy];

CGRect tempRec = CGRectMake(node.nodePosition.x, node.nodePosition.y node.nodePosition.x, node.nodePosition.y);
NSValue *rectObj = [NSValue valueWithCGRect:tempRec]; //transforma o cgrect num objeto

[self.gridView.fatherNodes setValue:rectObj forKey:node.nodeName];
[self.gridView setNeedsDisplay];
}
Run Code Online (Sandbox Code Playgroud)

我的通知方法试图更新我的绘图:(不工作!)

- (void) receiveTestNotification:(NSNotification *) notification
{
NSDictionary *userInfo = notification.userInfo;
DTINode *notificationNode = [userInfo objectForKey:@"myNode"];
NSLog(@"Im Here!");
for (DTINode *node in self.nodesToDraw)
{
    NSLog(@"Here too"); …
Run Code Online (Sandbox Code Playgroud)

ios setneedsdisplay

9
推荐指数
1
解决办法
1万
查看次数

setNeedsDisplay在块内不起作用

我正在CMMotionManager用于检索加速度计数据.问题是加速度计数据会定期打印,实例变量会在视图中更改,但视图不会重新绘制.我已经检查过这hv不是零,而且一切都被吸引住了.在块中调用setNeedsDisplay是否有问题?

-(void) viewDidAppear:(BOOL) animated
{
    [super viewDidAppear: animated];

    [motionManager startAccelerometerUpdatesToQueue:motionQueue withHandler:
     ^(CMAccelerometerData *accelerometerData, NSError *error)
    {

        NSLog(@"%@",accelerometerData);

        HypnosisView *hv = (HypnosisView *) [self view];

        hv.xShift = 10.0 * accelerometerData.acceleration.x;
        hv.yShift = -10.0 * accelerometerData.acceleration.y;

        [hv setNeedsDisplay];

    }];    
}
Run Code Online (Sandbox Code Playgroud)

ios objective-c-blocks setneedsdisplay

7
推荐指数
1
解决办法
2156
查看次数

setNeedsDisplay不会按预期触发子视图中的drawRect

我正在努力setNeedsDisplay.我认为它应该触发调用drawRect:它的视图的调用和下面的层次结构,如果它在视图的范围内,但我不会发现它是这种情况.这是我的设置:

从应用程序委托中,我创建了一个视图,其大小是一个正方形,基本上覆盖整个屏幕的空间.这个观点叫做TrollCalendarView.TrollCalendarView除了由指南针触发的旋转之外,没有太多事情发生.

有7个TrollCalendarView被调用的子视图PlatformView旨在包含TrollCalendarView以7边排列围绕中心排列的2D绘图对象.因此,当iPad旋转时,这7个视图旋转,使得它们始终以基本方向定向.

每个PlatformView子视图都包含3个子视图Tower.每个塔包含实现的2D绘图对象drawRect:.

所以,总而言之,我TrollCalendarView有空的drawRect:,子视图PlatformViewPlatformview- >塔,每个都有drawRect实现.此外,Tower位于Platform的范围内,而Platform位于TrollCalendarView的范围内.

TrollCalendarView我添加了一个滑动识别器.当我滑动发生时,属性被更新,我打电话[self setNeedsDisplay]但似乎没有任何事情发生.我drawRect:在每个视图中添加了NSLog条目到方法,并且只TrollCalendarView drawRect:调用了该方法.具有讽刺意味的是,这是一个视图,其drawRect方法将为空.

没有xib文件.

我需要做些什么来确保drawRect调用其他子视图中的方法?是否有某些文档描述了可能影响这一点的所有细微差别?

objective-c subview drawrect setneedsdisplay

6
推荐指数
2
解决办法
4899
查看次数

使用NSTimer在Xamarin for iOS中调用SetNeedsDisplay

我有一个UIView从缓冲区获取数据(即更改)并绘制它.我希望屏幕以10Hz的频率运行.UIView被称为窗格,这就是我在ViewController中调用它的方式:

        //create graphics to display data
        GraphPane pane = new GraphPane ();
        pane.Frame = UIScreen.MainScreen.Bounds;
        Add (pane); 

        //setup timer to update pane
        NSTimer timer = NSTimer.CreateRepeatingTimer (0.1, delegate {pane.SetNeedsDisplay ();});
Run Code Online (Sandbox Code Playgroud)

这不起作用(从不调用Pane.Draw),我没有找到一个如何做到这一点的好例子.任何建议表示赞赏.

c# objective-c nstimer setneedsdisplay xamarin

6
推荐指数
1
解决办法
4667
查看次数

让UIView drawRect出现在后台线程中

我希望有一个UIView实现类似方法的子类setNeedsDisplay,除了重绘(即通常会被调用通过drawRect:)将在后台线程中很快发生,而不是在当前更新周期结束时.

它可能被称为setNeedsAsynchronousDisplay.或者现有的setNeedsDisplay可能被劫持并且不会在循环结束时或者其他任何情况下重绘,只要它允许重绘不会发生在主线程阻塞屏幕上更新交互直到完成.

在重绘之前,视图可以继续使用其当前绘制的表示.

沿着这些方向的事情是否合理可行?

谢谢!

cocoa-touch uiview drawrect ios setneedsdisplay

6
推荐指数
1
解决办法
4838
查看次数

setNeedsDisplay:NO是否有任何用处?

在Cocoa中,当我们想要重绘视图时,我们会向视图发送一条setNeedsDisplay:消息,告诉视图使用参数YES重绘自身.我想知道是否有任何情况你想发送一个视图setNeedsDisplay:NO,比如多线程环境,如果发送一个视图a setNeedsDisplay:YES,然后立即再次设置它setNeedsDisplay:NO会使视图重绘自己.如果没有理由打电话setNeedsDisplay:NO,那么为什么要创建这样一个乏味的方法,他们可以在那里实现类似的东西[view redrawView]

cocoa objective-c nsview setneedsdisplay

5
推荐指数
1
解决办法
435
查看次数

UIView子视图中的setNeedsLayout

我有一个UIViewControllerwillRotateToInterfaceOrientation,我打电话[self view] setNeedsLayout];

这个视图调用它是子视图的(a UIScrollView)layoutSubviews方法,但UIScrollView不会调用layoutSubviews它的子视图.这是它的假设吗?我想如果你打电话setNeedsLayout给一个视图,它会调用layoutSubviews每个子视图和他们的子视图,然后...

我一定要手动,覆盖layoutsubviewUIScrollView并调用setNeedsDisplay每个子视图?

谢谢.

cocoa-touch objective-c uiview ios setneedsdisplay

4
推荐指数
1
解决办法
4401
查看次数

重新加载/刷新子视图 - setNeedsDisplay不起作用

我遇到setNeedsDisplay的问题.我有一个带有很多子UIViews的UIView,在Inteface Builder中创建.我还有一个带有IBAction的按钮.在这个IBAction中我想重绘/重新加载所有UIViews(或所有UIElements,如UILabel,UIWebView等等)

我这样做,这对我不起作用,不知道为什么..:

//redraw the UIViews
[self.view_card_0 setNeedsDisplay];
[self.view_card_1 setNeedsDisplay];
[self.view_card_stapel setNeedsDisplay];

//other UI Elements
[self.webView_0 setNeedsDisplay];
[self.webView_1 setNeedsDisplay];
[self.webView_stapel setNeedsDisplay];

[self.lblCardTitle_0 setNeedsDisplay];
[self.lblCardTitle_1 setNeedsDisplay];
[self.lblCardTitle_stapel setNeedsDisplay]; 

[self.img_card_0 setNeedsDisplay];
[self.img_card_1 setNeedsDisplay];
[self.img_card_stapel setNeedsDisplay];
Run Code Online (Sandbox Code Playgroud)

如何重绘/重新加载/刷新所有UIElements/UIViews和Subviews?

编辑1:

我如何加载视图:

detailViewController = [[DetailViewController alloc]  
initWithNibName:@"DetailViewController_iPad" bundle:[NSBundle mainBundle]];  
Run Code Online (Sandbox Code Playgroud)

detailviewcontroller没有viewcontroller,只是uiviews,这里是hierarchie:

  • UIView
    - UIViewContainer
    --- UIView0
    --- UIView1
    --- UIViewStapel

我期望做什么:

*我不想重置UIView,我想改变它们的背景和内容.*

我在我的detailview中有很多子视图(uiviews),见上面的hierarchie.我在UIViews中显示内容,内容来自coreData.
view1包含coreData的当前行.
view0包含coreData的前一行.
viewStapel包含coreData的下一行.

使用IBAction我想迭代coreData行,如果调用了动作,则显示当前的下一行......依此类推.

在Log中,数据已更改,但未在UIViews中显示.因此我需要重绘或重新加载或类似的东西,以显示当前数据.

编辑2:已解决
我已将代码放入一个新方法,并调用此方法已解决了我的问题.

subview redraw uiview ios setneedsdisplay

4
推荐指数
2
解决办法
3万
查看次数