小编Wim*_*tra的帖子

现有圆上的曲线文字

对于我正在构建的应用程序,我绘制了2个圆圈.一个比另一个大一点.我想在这些行之间弯曲文本,以便建立一个圆形菜单.

我阅读了关于弯曲文本的大部分内容,你必须将文本分成字符,然后用正确的角度绘制每个字符(通过旋转你正在绘制的上下文).

我无法绕过如何为我的角色获得正确的角度和位置.

我在屏幕截图中列出了目前菜单的样子.只有我添加的文本是从UIImageView中的图像加载的.

替代文字

我希望有人可以在某些方面为我提供一些关于如何在白色圆圈中绘制文字的起点.

编辑:好的,我目前正在这一点上:

替代文字

我通过使用以下代码完成:

- (UIImage*) createMenuRingWithFrame:(CGRect)frame
{
    CGRect imageSize = CGRectMake(0,0,300,300);
    float perSectionDegrees = 360 / [sections count];
    float totalRotation = 90;
    char* fontName = (char*)[self.menuItemsFont.fontName cStringUsingEncoding:NSASCIIStringEncoding];

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(NULL, imageSize.size.width, imageSize.size.height, 8, 4 * imageSize.size.width, colorSpace, kCGImageAlphaPremultipliedFirst);

    CGContextSetTextMatrix(context, CGAffineTransformIdentity);
    CGContextSelectFont(context, fontName, 18, kCGEncodingMacRoman);

    CGContextSetRGBFillColor(context, 0, 0, 0, 1);

    CGPoint centerPoint = CGPointMake(imageSize.size.width / 2, imageSize.size.height / 2);
    double radius = (frame.size.width / 2);

    CGContextStrokeEllipseInRect(context, CGRectMake(centerPoint.x - (frame.size.width / 2), centerPoint.y …
Run Code Online (Sandbox Code Playgroud)

iphone math cocoa-touch quartz-graphics quartz-2d

54
推荐指数
5
解决办法
2万
查看次数

画出一个圆圈的一部分

对于iPhone应用程序,我想绘制一个圆圈,仅用于填充x百分比.

像这样的东西:

替代文字

我没有问题计算半径,度数或弧度,这是没有问题的.绘制圆圈也已完成.但是如何让iPhone SDK绘制已填充的部分.

我可以画一个大小的矩形,但不是圆的一部分.

我只想在一个正常的背景下绘制它.

希望有人能在这里给我任何指示.

iphone cocoa-touch objective-c

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

在Set <T>中的索引处获取对象

在Swift 1.2中有一个Set对象,您可以使用它来创建静态类型的Set.

我只是无法找到如何在某个索引处获取对象.它有一个subscript允许您执行以下操作:mySet[setIndex].

这将检索该对象setIndex.但现在我想从某个Int索引中获取一个对象.

subscript

但是如何创建具有特定"索引"的SetIndex?

set swift

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

带有infite滚动和延迟加载的UITableView

我得到了一个UITableView充满未知数量的行.每行包含(例如3个)图像,应用程序从Web服务收集此信息.

UITableView我实现无限滚动.每当表几乎达到当前行数的末尾时,我就会启动对webservice的调用,以获取接下来的50行数据.我在这个scrollViewDidScroll方法中执行此操作UITableView.

- (void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat actualPosition = scrollView.contentOffset.y;

    float bottomOffset = 450;
    if([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)
        bottomOffset = 1000;

    CGFloat contentHeight = scrollView.contentSize.height - bottomOffset;
    if (actualPosition >= contentHeight && !_loading && !_cantLoadMore)
    {
        self.loading = YES;

        _currentPage++;

        NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
        [dict setObject:[NSNumber numberWithInt:_currentPage] forKey:@"page"];
        [dict setObject:[_category objectForKey:@"ID"] forKey:@"category"];

        [self performSelectorInBackground:@selector(getWallpapersInBackground:) withObject:dict];
    }
}
Run Code Online (Sandbox Code Playgroud)

行中的图像UITableView是延迟加载的.每当一行可见时,图像将被加载到一个单独的线程中,并且一旦完全下载图像就会更新行.我用于延迟加载的原则与Apple在其文档中建议的相同.图像也被添加到本地NSDictionary,因此当行滚出屏幕并返回时(我重新创建行),我可以获取它.

由于单个视图中的图片数量可以达到2000 - 3000,因此我还会将图像缓存到磁盘并清除图像,这些图像距离NSDictionaryX行以外的距离.当用户向下滚动并再次向上滚动时,会发生以下情况:

  1. 显示新行
  2. 调用延迟加载方法,该方法检查图像是否存在于磁盘上或者应该下载它. …

iphone cocoa-touch ios

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

在主目标中包含pod,而不在WatchKit扩展中

我在当前项目中添加了WatchKit扩展.该项目使用Cocoapods 0.36.1添加一些框架,但现在我想从WatchKit扩展项目中排除一些pod.

WatchKit扩展项目不需要我在普通目标中使用的很多框架,但是在改变我的Podfile后我无法使Cocoapods正常工作.

use_frameworks!在我的Podfile中使用,但运行后pod install我得到以下消息:

[!] CocoaPods did not set the base configuration of your project because your project already has a custom config set. In order for CocoaPods integration to work at all, please either set the base configurations of the target `HomeHandler` to `Pods/Target Support Files/Pods-HomeHandler/Pods-HomeHandler.debug.xcconfig` or include the `Pods/Target Support Files/Pods-HomeHandler/Pods-HomeHandler.debug.xcconfig` in your build configuration.
[!] CocoaPods did not set the base configuration of your project because your project already has a …
Run Code Online (Sandbox Code Playgroud)

ios cocoapods swift

8
推荐指数
1
解决办法
3026
查看次数

在UIView中查找所有类型的控件

我正在寻找一种自动本地化按钮/文本字段等文本的方法,对于这种方法,我需要在UIView上找到所有(例如)UIButton.

我尝试了以下两种方法,但它们都没有像我希望它们一样工作:

for (UIView* subView in self.view.subviews)
{
    NSLog(@"object class : %@", [subView class]);

    if ([subView isMemberOfClass:[UIButton class]])
        NSLog(@"Button found!");
}
Run Code Online (Sandbox Code Playgroud)

这段代码的问题是RoundedRectButton与UIButton类不匹配,而它实际上只是一个UIButton.

我也尝试过以下方法:

for (UIButton* button in self.view.subviews)
{
// Do my stuff
}
Run Code Online (Sandbox Code Playgroud)

但愚蠢的是,可可触摸实际上只列出了for循环中的所有子视图(也是UITextFields等).

有没有办法从视图中获取所有UIButton?或者我真的需要通过查看他们的选择器来找到控件.

iphone cocoa-touch

7
推荐指数
2
解决办法
6082
查看次数

UIImagePickerController不是全屏

自iOS7升级以来,我有一种奇怪的行为了UIImagePickerController.在这个应用程序中我使用的UIImagePickerController是a cameraOverlayView.

在iOS6中,我UIImagePickerController使用以下代码调用:

_picker = [[UIImagePickerController alloc] init];

if ([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear]) {
    _picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    _picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;
    _picker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
    _picker.showsCameraControls = NO;
    _picker.navigationBarHidden = NO;
    _picker.toolbarHidden = YES;
    _picker.wantsFullScreenLayout = YES;

    _overlayViewController = [[OverlayViewController alloc] init];
    _overlayViewController.picker = _picker;
    _overlayViewController.frameSize = self.frameSize;
    _overlayViewController.delegate = self;
    _picker.cameraOverlayView = _overlayViewController.view;
}
else {
    _picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

}
_picker.delegate = self;
Run Code Online (Sandbox Code Playgroud)

其中OverlayViewControllerUIViewController一个透明背景,在屏幕上绘制一些自定义控件.

在此输入图像描述

但是现在在iOS 7中,相机通过状态栏绘制,并且在实时摄像机视图下方会出现黑条.

我可以通过应用解决这一CGAffineTransformMakeTranslationcameraViewTransform的特性UIImagePickerController …

cocoa-touch objective-c ios ios7

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

Quartz.net在工作完成后间隔重复工作

我目前正在一个简单的应用程序中实现Quartz.net,它应该每隔(例如)5秒执行一段代码.只有现在代码有时需要5秒以上才能完成.

起初我遇到的问题是代码是在相同代码仍在运行时执行的,我通过使用IStateFulJob接口而不是IJob接口来解决这个问题.

但我真正想要完成的是,我的工作在工作完成后5秒执行,而不是在我上一份工作开始后5秒执行.

我当然可以处理当我的听众"听到"工作准备好并重新安排工作时触发的事件,但我想知道是否没有任何标准功能.

c# scheduling quartz-scheduler quartz.net

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

今天00:00:00获取NSDate作为时间

我在Xcode中编写一个类别,它将扩展当前的NSDate类.我想添加两个我经常使用的方法,不知怎的,我不能让它们正常工作.

目前我有这个代码:

+ (NSDate*) today
{
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

    NSDateComponents *todayComponents = [gregorian components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]];
    NSInteger theDay = [todayComponents day];
    NSInteger theMonth = [todayComponents month];
    NSInteger theYear = [todayComponents year];

    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setDay:theDay]; 
    [components setMonth:theMonth]; 
    [components setYear:theYear];

    NSDate* todayDate = [gregorian dateFromComponents:components];

    [components release];
    [gregorian release];

    return todayDate;
}
Run Code Online (Sandbox Code Playgroud)

我希望它返回这样的日期:"2010-11-03 00:00:00 +01".但不知怎的,时区一直在冒险,因为这段代码返回"2010-11-02 23:00:00 +0000".

任何人都可以告诉我如何修复此代码实际返回正确的日期?或者我可以使用此日期,我的应用程序将自行转换,因为机器设置的时区.

我必须将我的应用程序中的某些事件记录到数据库中,该数据库也只使用[NSDate date]方法.这是否意味着[NSDate date]方法也使用没有时区信息的时间?

编辑:我认为它与夏令时错误有关.我看到的东西与Clock应用程序可能完全相同,但是这些错误让人们起得更晚.此外,TimeZone默认为您设备上当前设置的TimeZone,因此在您更改设置屏幕中的时区之前,它应保持不变.

EDIT2:好的,还有一些测试:

NSLog(@"CurrentDate: %@", [NSDate date]);
NSLog(@"TZ: %@", [NSTimeZone …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa objective-c ios

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

HomeKit HMHome和HMRoom标识符/额外元数据

在我的应用程序中,我正在使用HomeKit.您可以添加/删除HMHome和HMRoom对象,但我还想为它们添加一些元数据.例如,在我的应用程序中,我希望能够向HMRoom添加图标并向其添加项目数组.

我的解决方案是我将它与CoreData结合使用并存储有关HMRoom的额外信息,但除了名称之外,无法识别HMHome和HMRoom对象.如果我的应用程序是世界上唯一编辑HomeKit对象的应用程序,那么这不会成为问题,但当然可能还有其他应用程序,也可以调整HMHome和HMRoom对象(删除它们,重命名它们).

当用户执行以下操作之一时,我真的会遇到问题:

  1. 开始我的申请
  2. 添加HMHome和HMRoom对象
  3. 通过我的应用程序向HMRoom对象添加一些元数据,该应用程序存储在我的CoreData数据库中
  4. 退出我的申请
  5. 启动另一个应用程序并重命名刚刚创建的HMRoom
  6. 再次启动我的应用程序

因为HMHome和HMRoom对象没有已知的标识符,所以我找不到我在CoreData中存储的元数据,并且元数据实际上已丢失,因为我无法再将创建的HMRoom的名称与我的CoreData数据库中的数据匹配.

所以,我的问题是:有没有办法'识别'HMRoom和HMHome对象而不是他们的名字?

core-data ios homekit

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