为什么UITextField嵌入在a中时不会响应触摸事件UIView(它本身嵌入在原始视图控制器的主体中UIView)?
这是代码:
- (void)loadView
{
self.view = [UIView new];
UIView *positionalView = [[UIView alloc] initWithFrame:CGRectMake(20, 100, 280, 100)];
UITextField *usernameField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 280, 50)];
usernameField.placeholder = @"Full Name";
usernameField.delegate = self;
[usernameField addTarget:self action:@selector(textFieldChanged:) forControlEvents:UIControlEventEditingChanged];
[positionalView addSubview:usernameField];
UITextField *passwordField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 280, 50)];
passwordField.placeholder = @"Password";
passwordField.delegate = self;
[passwordField addTarget:self action:@selector(textFieldChanged:) forControlEvents:UIControlEventEditingChanged];
[positionalView addSubview:passwordField];
[self.view addSubview:positionalView];
}
Run Code Online (Sandbox Code Playgroud)
发现很难理解这种行为,因为上面的代码工作正常,如果我只是删除positionalView并直接将文本字段添加到主self.view.
有谁能解释一下?
我UIViews创建了三个自定义圈.当用户点击其中一个时,我想将视图的背景颜色更改为灰色.
最初创建视图时,它是randomColor.如果再次选择视图,我希望这种颜色保持不变.即,再次选择时,从颜色变为灰色,然后变为灰色.
更改视图背景或在我的自定义UIView中添加叠加层以使其变灰的最佳方法是什么?
drawRect:(CGRect)rect在制作简单的iOS应用程序时,我重写了该方法.在我正在阅读的书中,界限的定义self.bounds如下所示:
- (void)drawRect:(CGRect)rect
{
CGRect bounds = self.bounds;
//rest of drawing code here
}
Run Code Online (Sandbox Code Playgroud)
我注意到在书中,该方法的其余部分甚至没有使用该rect参数并且工作正常.我假设rect会在视图中设置边界,所以我尝试了以下内容:
- (void)drawRect:(CGRect)rect
{
CGRect bounds = rect;
//rest of drawing code here
}
Run Code Online (Sandbox Code Playgroud)
(显然,我甚至不需要bounds等同于rect因为我可以rect在方法中直接引用.)我尝试了两种方式并且它们产生了相同的结果.那么,self.bounds和rect平等的吗?如果是,我假设rect用于在幕后某处设置当前视图的边界.但如果它们不是,那么rect作为一个甚至不使用它的方法的参数有什么用呢?我忽略了一些明显的东西吗
我在Xcode Images.xcassets中定义了一个bg图像,并希望将其用作视图的背景,但bg保持黑色.我正在使用:
override func viewDidLoad()
{
super.viewDidLoad();
view.backgroundColor = UIColor(patternImage: UIImage(named: "background_ipad"));
}
Run Code Online (Sandbox Code Playgroud)
这应该根据SO上的其他一些票据工作,但由于某种原因,背景保持黑色,不显示图像.有什么想法会发生这种情况吗?
我正在向视图控制器添加视图。按照这种观点,我已经实现了willMoveToSuperview。现在,我经历了两次调用此函数:
这是预期的行为吗?我还能使用什么其他方法来检测当前视图是否仅添加到超级视图?didMoveToSuperview似乎也一样。还是应该使用一个变量来记住该函数的调用频率?
编辑:
现在我想我找到了它被两次调用的原因。我正在使用hide方法关闭视图。它在里面,C#但在这里不重要:
UIView.Animate (
0.5, // duration
() => { Alpha = 0; },
() => { RemoveFromSuperview(); }
);
Run Code Online (Sandbox Code Playgroud)
如果我对此发表评论,它不会被两次调用。如何保存动画并确保只调用一次?
我在UIView上应用了一个背景阴影,使它看起来像是在"背景之上"(这是一个MapView),但阴影并没有完全扩展到更宽的iPhone 6和6+屏幕上虽然UIView我正在应用它.
在viewDidLoad我使用此代码将阴影应用于UIView:
CALayer *layer = self.view_detailview.layer;
layer.shadowOffset = CGSizeMake(1, 1);
layer.shadowColor = [[UIColor blackColor] CGColor];
layer.shadowRadius = 4.0f;
layer.shadowOpacity = 0.80f;
layer.shadowPath = [[UIBezierPath bezierPathWithRect:layer.bounds] CGPath];
Run Code Online (Sandbox Code Playgroud)
在我的故事板中,我有一个约束设置,强制UIView宽度匹配超级视图宽度,它可以正常工作,没有任何问题或警告.但是当我在6或6+上运行我的应用程序时,我发现阴影没有如此完全延伸:

我可以通过将其背景颜色设置为明显的并且看到它填满屏幕来验证UIView是否使用全宽度.
我有UITableViewCell,我在其中添加一个UIView内部,我将子视图添加为UIButton,UIImageView.
现在我想访问UIView willDisplayCell.为此我在下面.
NSArray *subviews;
subviews = cell.subviews;
int xxyyzz = 1;
for(id aView in subviews) {
NSLog(@"aView====%@" , [UIView class]);
if([aView isKindOfClass:[UIView class]]) {
NSLog(@"This is UIView... Do what you want to do...");
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行时,我将This is UIView... Do what you want to do...获得所有子视图(即UIButton,UIImageView等).aView====UIView
我相信这是因为,UIView是所有对象的超类.
UITableViewCell...我需要在视图中找到子视图垂直对齐中间,而不使用编程方式使用约束硬编码顶部值150.我希望实现如下所示:

以下是我的代码到目前为止,请指教.
import UIKit
class MainViewController: UIViewController {
var viewInner:UIView = UIView()
var viewOuter:UIView = UIView()
override func viewDidLoad() {
super.viewDidLoad()
viewInner.backgroundColor = UIColor.redColor()
viewOuter.backgroundColor = UIColor.purpleColor()
viewOuter.frame = CGRectMake(100, 100, 400, 400)
viewInner.setTranslatesAutoresizingMaskIntoConstraints(false)
let viewsDictionary = ["viewInner":viewInner]
viewOuter.addSubview(viewInner)
self.view.addSubview(viewOuter)
//Add Constraint
var constOuterH = NSLayoutConstraint.constraintsWithVisualFormat("H:|-10-[viewInner(>=200)]-10-|", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary)
var constOuterV = NSLayoutConstraint.constraintsWithVisualFormat("V:|-150-[viewInner(100)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary)
viewOuter.addConstraints(constOuterH)
viewOuter.addConstraints(constOuterV)
}
}
Run Code Online (Sandbox Code Playgroud) 我刚刚从iOS 7.1切换到iOS 8.1.我遇到了以下问题UIView animateWithDuration.图片胜过千言万语,我制作了每个iOS下的行为视频:
iOS 7.1:
iOS 8.1:
这是一款iPhone应用程序.
我应该注意到,在发布之前我已经搜索了SO和其他地方.这似乎是一个公认的问题,但我发现的是一些参考"使用基于约束的动画"(我不明白)并关闭自动布局,但没有真正的共识.
我已经尝试了几次刺伤,但没有任何进展.如果有人能指出(或指导我)一个明确的解决方案,我真的很感激.
我应该提一下,该应用程序只能在纵向位置工作,所以我没有考虑在开发过程中自动布局.
所有涉及的视图都是以编程方式创建的,除了滚动条本身.
这是代码.我包括整个方法,这很长,但我真的不明白新iOS中发生了什么变化,所以我是安全的.这个animateWithDuration电话非常深入到这个块中:
-(void) displayDayChart
{
[self.scroller setBackgroundColor:[UIColor clearColor]];
UIImage *image = [UIImage imageNamed:@"GrayPaper.png"];
self.chartView.backgroundColor = [UIColor colorWithPatternImage:image];
[self.view addSubview:self.scroller];
[self.scroller setScrollEnabled:YES];
[self.scroller setContentSize:CGSizeMake(320, 1800)];
[self.scroller setContentOffset:CGPointMake(0.0, 0.0) animated:YES];
dayBarArray = [[NSMutableArray alloc]init];
infoLabelArray = [[NSMutableArray alloc]init];
timeLabelArray = [[NSMutableArray alloc]init];
timeFrameDC = - 86400; // 24 hours for this test, selectable in real life
[self.scroller.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
timeframeDCStart = [NSDate dateWithTimeIntervalSinceNow:timeFrameDC];
timeframeDCEnd …Run Code Online (Sandbox Code Playgroud) 我有一个UIButton,我使用界面构建器放置在屏幕的中心.
我想动画UIButton来上下移动并永远重复动画.
到目前为止,我在didMoveToView中有这个:我正在使用swift.
UIView.animateWithDuration(3, animations: { () -> Void in
self.playBtn.transform = CGAffineTransformMakeTranslation(0, 10)
self.playBtn.transform = CGAffineTransformMakeTranslation(0, -10)
self.playBtn.transform = CGAffineTransformMakeTranslation(0, -10)
self.playBtn.transform = CGAffineTransformMakeTranslation(0, 10)
UIView.setAnimationRepeatCount(-1)
})
Run Code Online (Sandbox Code Playgroud)
但是它只运行第一行并将按钮向下移动10.
任何帮助,将不胜感激
ios ×10
uiview ×10
objective-c ×5
swift ×2
animation ×1
autolayout ×1
bounds ×1
cocoa-touch ×1
ios8.1 ×1
iphone ×1
subview ×1
uicolor ×1
uitableview ×1
uitextfield ×1
xcode ×1