我试图为彼此叠加的视图添加投影,视图崩溃允许其他视图中的内容被看到,在这种情况下我想保持view.clipsToBounds开启,以便当视图崩溃时,他们的内容被剪裁.
这似乎使我很难向图层添加阴影,因为当我打开clipsToBounds阴影时也会被剪裁.
我一直试图操纵view.frame并view.bounds为了向框架添加一个投影,但允许边界足够大以包含它,但是我没有运气.
这是我用来添加阴影的代码(这只适用于clipsToBoundsOFF,如图所示)
view.clipsToBounds = NO;
view.layer.shadowColor = [[UIColor blackColor] CGColor];
view.layer.shadowOffset = CGSizeMake(0,5);
view.layer.shadowOpacity = 0.5;
Run Code Online (Sandbox Code Playgroud)
以下是应用于最轻的灰色层的阴影的屏幕截图.希望这能让我知道如果clipsToBounds关闭,我的内容将如何重叠.

如何为我添加阴影UIView并保持剪辑内容?
编辑:只是想补充说我还使用了带阴影的背景图像,这确实很有效,但是我仍然想知道最好的编码解决方案.
我想知道如何使用该UIView属性clipsToBounds.
官方文档说明如下:
clipsToBounds属性一个布尔值,用于确定子视图是否仅限于视图的边界.
讨论
设置此值会YES导致子视图被剪切到接收器的边界.如果设置为NO,则不会剪切其帧超出接收器可见边界的子视图.默认值为NO.
但我不清楚这究竟意味着什么.我该怎么用clipsToBounds?将此属性设置为YES完全有什么后果?或者NO?
我在草图中设计了UI元素,其中一个具有模糊1和传播0的阴影.我查看了视图图层属性的文档,图层没有任何名为spread或blur的东西,或者任何等效的东西(唯一的控件是only shadowOpacity)如何控制模糊和传播之类的东西?
编辑:
以下是Sketch中的设置:
这就是我希望我的阴影看起来像:
我的代码如下:
func setupLayer(){
view.layer.cornerRadius = 2
view.layer.shadowColor = Colors.Shadow.CGColor
view.layer.shadowOffset = CGSize(width: 0, height: 1)
view.layer.shadowOpacity = 0.9
view.layer.shadowRadius = 5
}
Run Code Online (Sandbox Code Playgroud) 两者都具有大多数相同的属性,都支持不同类型的动画,两者都代表不同的数据.UIView和CALayer有什么区别?
我有一个在其图层中添加了UIView大约8个不同的CALayer子图层.如果我修改视图的边界(动画),那么视图本身会缩小(我用a检查过backgroundColor),但是子图层的大小保持不变.
怎么解决这个?
我知道之前已经问过这个问题,但答案是矛盾的,我很困惑,所以请不要激怒我.
我希望UIView在我的应用程序中有一个可重用的子类.我想用nib文件描述接口.
现在让我们说它是一个加载指示器视图,其中包含一个活动指示器.我希望在某个事件上实例化此视图并激活到视图控制器的视图.我可以用编程方式描述视图的界面没有问题,以编程方式创建元素并在init方法中设置它们的框架等.
我怎么能用笔尖做到这一点?维护界面构建器中给出的大小而不必设置框架.
我已经设法这样做,但我确定它是错的(它只是一个带有选择器的视图):
- (id)initWithDataSource:(NSDictionary *)dataSource {
self = [super init];
if (self){
self = [[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"%@", [self class]] owner:self options:nil] objectAtIndex:0];
self.pickerViewData = dataSource;
[self configurePickerView];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
但是我覆盖了自己,当我实例化它时:
FSASelectView *selectView = [[FSASelectView alloc] initWithDataSource:selectViewDictionary];
selectView.delegate = self;
selectView.frame = CGRectMake(0, self.view.bottom + 50, [FSASelectView width], [FSASelectView height]);
Run Code Online (Sandbox Code Playgroud)
我必须手动设置框架而不是从IB中拾取它.
编辑:我想在视图控制器中创建此自定义视图,并有权控制视图的元素.我不想要一个新的视图控制器.
谢谢
编辑:我不知道这是不是最好的做法,我确定不是,但这就是我做的方式:
FSASelectView *selectView = [[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"%@",[FSASelectView class]] owner:self options:nil] objectAtIndex:0];
selectView.delegate = self;
[selectView configurePickerViewWithData:ds];
selectView.frame = CGRectMake(0, …Run Code Online (Sandbox Code Playgroud) 我正在创建一个可重用的框架,用于在iOS应用程序中显示通知.我希望将通知视图添加到应用程序中其他所有内容的顶部,有点像UIAlertView.当我初始化侦听NSNotification事件并在响应中添加视图的管理器时,我需要获得对应用程序中最顶层视图的引用.这就是我现在所拥有的:
_topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
Run Code Online (Sandbox Code Playgroud)
这适用于任何iOS应用程序,还是更安全/更好的方式来获得顶视图?
我在IB中设置了多组约束,我想根据某些状态以编程方式在它们之间切换.有一个constraintsA出口集合,所有出口集合都标记为从IB安装,constraintsB出口集合全部在IB中卸载.
我可以编程方式在两个集之间切换,如下所示:
NSLayoutConstraint.deactivateConstraints(constraintsA)
NSLayoutConstraint.activateConstraints(constraintsB)
Run Code Online (Sandbox Code Playgroud)
但是......我无法弄清楚何时这样做.看起来我应该能够做到这一点viewDidLoad,但我不能让它工作.我已经尝试过调用view.updateConstraints()并view.layoutSubviews()在设置约束后,但无济于事.
我确实发现,如果我设置约束,viewDidLayoutSubviews一切都按预期工作.我想我想知道两件事......
我在做一个应用程序,我一个子视图添加到使用视图addSubview:上IBAction.以同样的方式,当IBAction再次触摸带有该按钮的按钮时,应该调用removeFromSuperview添加在该子视图上的子视图IBAction:
PSEUDO CODE
-(IBAction)showPopup:(id)sender
{
System_monitorAppDelegate *delegate = (System_monitorAppDelegate *)[[UIApplication sharedApplication] delegate];
UIView *rootView = delegate.window.rootViewController.view;
if([self popoverView] is not on rootView)
{
[rootView addSubview:[self popoverView]];
}
else
{
[[self popoverView] removeFromSuperview];
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个名为UIView的以下CATransition finalScoreView,它使它从顶部进入屏幕:
CATransition *animation = [CATransition animation];
animation.duration = 0.2;
animation.type = kCATransitionPush;
animation.subtype = kCATransitionFromBottom;
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
[gameOver.layer addAnimation:animation forKey:@"changeTextTransition"];
[finalScoreView.layer addAnimation:animation forKey:@"changeTextTransition"];
Run Code Online (Sandbox Code Playgroud)
如何使它在它下降后反弹一次然后保持静止?它应该仍然从顶部进入屏幕,但在它关闭时反弹.
任何帮助将不胜感激,谢谢!
ios ×10
uiview ×10
uikit ×4
iphone ×3
objective-c ×3
calayer ×2
swift ×2
animation ×1
autolayout ×1
bounds ×1
cliptobounds ×1
cocoa-touch ×1
frame ×1
shadow ×1
uiwindow ×1
xib ×1