我试图绘制一条简单的线,问题是它的宽度不是1像素,而是2.如果我正确读取,文档说明用户空间单位将转换为像素.
代码很简单,但我的行总是2像素宽.
//Get the CGContext from this view
CGContextRef context = UIGraphicsGetCurrentContext();
//Set the stroke (pen) color
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
//Set the width of the pen mark
CGContextSetLineWidth(context, 1);
for (int i = 1; i <= sections - 1; i++)
{
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(0.0, i * kSectionHeight)];
CGContextMoveToPoint(context, 0.0, i * kSectionHeight); //Start point
CGContextAddLineToPoint(context, self.frame.size.width, i * kSectionHeight);
}
CGContextStrokePath(context);
Run Code Online (Sandbox Code Playgroud)

我有一个UITableView设置为不启用滚动,它存在于UIScrollView中.我这样做是因为设计规范要求看起来像桌面视图的东西(实际上它们中有两个并排),并且实现tableviews而不是添加一大堆按钮要容易得多,(分组表视图).
问题是,我需要知道滚动视图的容器视图有多大,所以它滚动表视图的整个高度.一旦加载,有没有办法找到tableview的高度?没有像滚动视图那样的contentView属性,框架似乎是静态的等等......
有什么想法吗?
我正在实现一个UITextView,其中我只想响应文本视图的指定部分中的触摸.
我有一个手势识别器附加到视图,并且工作正常,直到我将视图设置为第一响应者,如果视图中的点击点大于X和Y值,我会这样做.
- (IBAction)textViewTapped:(UIGestureRecognizer *)sender {
CGPoint point = [sender locationOfTouch:0 inView:self.view];
NSLog(@"x ix %f, y is %f", point.x, point.y);
if (point.x > 96 && point.y > 106)
[self.myTextView becomeFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)
问题是,一旦它被设置为第一响应者,然后通过点击该文本视图外部来重新签名,我的手势识别器方法永远不会被再次调用.如果我点击没有设置第一响应者的区域,那么我点击时会多次调用我的方法.如果我设置然后辞职第一响应者,它在第一次辞职后没有响应.
- (IBAction)viewTapped:(UIGestureRecognizer *)sender {
[self.view endEditing:YES];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(textViewTapped:)];
[self.myTextView addGestureRecognizer:tap];
NSArray *gestures = [self.myTextView gestureRecognizers];
NSLog(@"got %d recognizers", [gestures count]);
}
在尝试的时候,如果我在每次辞职后添加一个新的手势识别器,那么这是有效的,但显然不是一个好的解决方案.
有什么想法吗?
此代码之前已经发布,并且已被用于我可以收集的内容.我处于这样一种情况,我需要代码不要继续,直到我知道我是否有权访问联系人.
在Xcode 5.0.2和iOS 6上,这很好用.在iOS 7上,它永远挂起,然后当我杀死应用程序时,会出现一个对话框,要求允许访问联系人.
ABAddressBookRef addressBook = ABAddressBookCreate();
__block BOOL accessGranted = NO;
if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
accessGranted = granted;
dispatch_semaphore_signal(sema);
});
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
}
else { // we're on iOS 5 or older
accessGranted = YES;
}
Run Code Online (Sandbox Code Playgroud)
在尝试使用它时,我只需将BOOL设置为NO,然后在块中将其设置为YES.在块之后,我放了一个while循环,检查变量是YES,然后睡了1秒钟.在6上工作得非常好,在7中我永远不会到达块中的NSLog语句,并且我永远停留在while循环中打印日志语句.
我在这里做的事真的很蹩脚吗?或者这种方法在7上乱了吗?
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
if (granted)
{
self.myAddressBook = addressBook;
}
done = YES;
NSLog(@"in block, …Run Code Online (Sandbox Code Playgroud) 如果我在IB中创建一个按钮,并且只将类型设置为自定义,标题和字体大小,它会很好而且清晰.如果我以编程方式创建它,那么字体就会模糊不清.创建按钮的代码是:
CGRect frame = self.sendButton.frame;
NSString *title = @"Read Disclosure";
UIFont *font = [UIFont boldSystemFontOfSize:17.0];
CGSize titleSize = [title sizeWithFont:font constrainedToSize:frame.size];
CGFloat xValue = (self.view.frame.size.width - titleSize.width) / 2;
CGFloat yValue = frame.origin.y - (titleSize.height / 2);
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setFrame:CGRectMake(xValue, yValue, titleSize.width, titleSize.height * 2)];
[button setTitle:@"Read Disclosure" forState:UIControlStateNormal];
[button.titleLabel setFont:font];
[button setTitleColor:[UIColor colorWithRed:50.0/255.0 green:79.0/255.0 blue:133.0/255.0 alpha:1.0] forState:UIControlStateNormal];
[button setTitleShadowColor:nil forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
[button addTarget:self action:@selector(disclosureButtonAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
Run Code Online (Sandbox Code Playgroud)
我已经尝试了我能想到的每一个环境,似乎没有什么能有所作为.知道我在这里缺少什么吗?
谢谢.
我有一个包含滚动视图的视图控制器,它占用了整个可用窗口.有一个UIView,我用它作为容器视图,它是scrollview的子视图,包含所有其他视图和控件.视图控制器初始化时有很多配置,根据来自Web服务的数据,将显示哪些视图和控件.
附加到视图控制器的主视图的是轻击手势识别器.我发现我需要检查[触摸视图]以查看它是一个按钮还是我不希望手势识别器解释的任何其他控件,并从中传递一个NO值
委托方法,如果它是这些控件之一.
所以在这个容器视图中是另一个(UIView)子视图,在该子视图中是一个按钮.视图控制器是导航控制器堆栈的一部分,当它仅作为导航控制器呈现时,一切运行良好.
当导航控制器从标签栏的一个标签显示时,当我点击按钮时,它无法识别该按钮上的点击.当我打破上面的委托方法时,[触摸视图]是一个UIView,而不是UIButton.
如果我按住按钮一秒左右,则它会识别按钮,并将消息转发给按钮.
有什么想法吗?我可以发布代码,只是不知道发布什么...
ios ×5
button ×2
blurry ×1
contacts ×1
gesture ×1
height ×1
objective-c ×1
quartz-core ×1
semaphore ×1
title ×1
uitableview ×1
uitextview ×1
view ×1