我的内部有UIScrollView
,有些视图是从xib文件加载的。
UIScrollView
仅加载三个Views
。当前,左边和右边。
例如,我在左边有一个视图,在当前View
右边有一个视图。如果我向右滚动,UIScrollView
将删除左侧的视图,向右滚动到新的当前View
并将新视图加载到新当前{{1}的右侧}。
另外,我在View
之外有一个按钮。单击它时,它会更改UIScrollView
上显示的当前视图的背景颜色。
它运作良好但有时候,我不知道为什么,当我点击按钮更改视图的背景颜色很好的改变,但视图没有刷新所以用户无法看到更改背景颜色。
UIScrollView:
UIScrollView
点击按钮更改当前视图的背景颜色时的方法调用
container = [[UIScrollView alloc] initWithFrame:frame];
[container setBackgroundColor:[UIColor clearColor]];
[container setCanCancelContentTouches:NO];
[container setClipsToBounds:NO];
[container setShowsHorizontalScrollIndicator:NO];
[container setPagingEnabled:YES];
因此,正如您在方法结束时所看到的那样,我尝试在从- (void)menuColor:(MenuPickerViewController *)controller didPickOption:(UIView *)button
{
// Get the object containing the data of the product linked with the view.
MyProduct *product = (MyProduct *)[MyProduct getProduct:[_slider getCurrentContentDisplayed]];
// Get the the superview of the button sender to have an access for the attributes of this button (color selected, ...)
ColorButtonMenu *colorView = (ColorButtonMenu *)[button superview];
// Get the current UIView displayed in the UIScrollView
MyView *myView = (MyView *)[self sliderGetViewWithID:[_slider getCurrentContentDisplayed] FromSlider:_slider];
// I check with debugger, the color is well setted
product.color = colorView.color;
// "border" is a view in my xib that I want change its background color.
IFPrint(@"myView.border backgorund color before: %@\n", myView.border.backgroundColor.description);
[myView.border setBackgroundColor:[Utilities colorFromHexString:colorView.color]];
[myView.border setNeedsDisplay];
IFPrint(@"myView.border backgorund color after: %@\n", myView.border.backgroundColor.description);
IFPrint(@"=== DEBUG ===\n");
IFPrint(@"isMainThread ? : %i\n", [NSThread isMainThread]); // Always return YES
IFPrint(@"myView: %@\n", myView); // Always return the address of a valid pointer
IFPrint(@"myView border: %@\n", myView.border); // Always return the address of a valid pointer
IFPrint(@"=============\n\n");
}
加载的视图上调用方法setNeedsDisplay
,在“边框”内调用另一个视图但是没有效果。
而且,我的方法总是在主线程上调用。
任何假设?
谢谢!
修改:
显然,我已经测试过sliderGetViewWithID返回的视图是否是正确的视图。所有属性都设置得很好。在我看来,这确实是一个刷新问题。
答案 0 :(得分:0)
你确定你试图设置背景颜色的视图实际上是可见的吗?我猜它可能是屏幕外的,所以你什么也没看到。
您可能希望通过查找scrollview的边界和myView的框架之间的交集来捕获该事件。如果没有交集,那意味着myView实际上不可见。
所以代码是:
BOOL intersects = CGRectIntersectsRect(scrollview.bounds, myView.frame);
if(intersects == NO)
{
NSLog(@"myView is offscreen");
}
答案 1 :(得分:0)
问题解决了:
设置视图的背景颜色后。我从UIScrollView中删除视图,然后在UIScrollView中添加它。这有点棘手,但效果很好!
[myView removeFromSuperView];
[myScrollView addSubview:myView];