小编Ger*_*acs的帖子

检测UIScrollView位置

我试图在我的iOS应用程序中使用UIScrollView作为导航设备.基本上,我希望应用程序根据启用分页的UIScrollView的位置加载特定内容.它有点像导航轮.

目前,我有一个两页(2*320)的scrollview,我正在使用scrollViewDidEndDragging委托方法并contentoffset.x加载适当的内容.我试着确定scrollview的位置:

if (scrollView.contentOffset.x < 320) {
   // Load content 1
    }
else if (scrollView.contentOffset.x >= 320) {
   // Load content 2
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是我要么不理解如何使用contentoffset,要么不适合处理我的问题.无论哪种方式,我都被困住了.有人能告诉我出错的地方和/或向我展示确定滚动视图位置的更有效方法吗?

我很傻,我忘了提问题是什么......基本上,我无法跟踪scrollview的位置.当我移动到第二页时,如果我超过620限制(向右反弹),它只会记录更改.但是当我回到起始位置(第1页)时,它会注册更改.换句话说,我的跟踪不准确.

代表和其他一切工作正常,我记录下来!

objective-c uiscrollview ios contentoffset

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

以编程方式识别带有 Notch 的 iPhone

我正在尝试以编程方式识别带有缺口的 iPhone。我知道 screen.size 方法,但是当你有一个支持所有界面方向的通用应用程序时,它会变得一团糟(计算所有可能的变化)。因此,我正在寻找一种更简单、更优雅的方法来检测较新的 iPhones X 型号。

我在网上偶然发现了一种应该有效的方法。在其中,您测量安全区域的底部插图,如果它不为零,则您拥有 iPhone X 型号。这在理论上是有道理的,因为安全区域不会到达 iPhone X 手机的屏幕底部,但会在所有其他设备上到达。我是这样检查的:

if (@available( iOS 11.0, * )) {
    if ([[[UIApplication sharedApplication] keyWindow] safeAreaInsets].bottom > 0) {
        // iPhone with notch
    }
} else {
    // Regular iPhone
}
Run Code Online (Sandbox Code Playgroud)

然而,这行不通。有人可以指出我在实施中的错误或确认这种方法是否可行吗?

xcode objective-c iphone-x ios12

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

AVAudioPlayer和随机慢

这个问题可能过于含糊,无法通过StackOverflow's标准,但我必须尝试发布它,因为我的选项用完了......:/

长话短说:我的应用程序经历了随机的缓慢时期.它不会经常发生(可能每个月一次),但是只有完全重新启动它运行的iDevice才有帮助.症状是:2-3秒的响应时间和缓慢,波动的动画; 整个应用程序基本上变得无法使用.

我通过每个可能的诊断工具运行应用程序,其中没有发现任何错误; 没有内存泄漏或异常高的CPU使用率.但是,这并不奇怪,考虑到应用程序非常简单,一个卡片游戏的跟踪器应用程序.

所有这些让我相信,AVAudioPlayer当用户点击时,我用来播放声音button可能是问题的原因(它是整个应用程序中唯一的,相对高复杂度的元素).但是,我不确定,这是我需要帮助的地方.我在这里提供了一个示例代码,也许有iOS音频播放经验的人可以查看它,看看是否有一些我忽略的错误.

在这里,我们开始:首先,我初始化一个"静音播放器",每秒钟保持播放一个静音轨道以保持AVAudioPlayer活力.这是必要的,因为在长时间AVAudioPlayer不活动之后被调用时的响应时间相对较长.

NSString *silenceFilePath = [[NSBundle mainBundle] pathForResource: @"silence" ofType: @"wav"];
NSURL *silenceFileURL = [[NSURL alloc] initFileURLWithPath: silenceFilePath];
silencePlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: silenceFileURL error: nil];
[silencePlayer setDelegate: self];
[silencePlayer prepareToPlay];

silenceTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f
                                                target:self
                                              selector:@selector(repeatSilence)
                                              userInfo:nil
                                               repeats:YES];
Run Code Online (Sandbox Code Playgroud)

NSTimer调用以下方法:

- (void) repeatSilence
{
    if (isAudioON == YES)
    {
        if (silencePlayer.playing)
        {
            [silencePlayer stop];
            silencePlayer.currentTime = 0;
            [silencePlayer play];
        }
        else …
Run Code Online (Sandbox Code Playgroud)

iphone audio objective-c avaudioplayer ios

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

在屏幕截图期间,拉伸的UIView背景被截断

所以,我正在截取一个子类UIView的截图,我将其保存到设备的照片流中.

问题:

问题是我用来resizableImageWithCapInsets为我的UIView添加一个拉伸的背景,但是这个背景在右侧被截断,我不明白为什么.如果有人可以帮助我,我将非常感激.

这是应用程序中的图像(左)和将其保存到照片流中后的样子(右)

我通过以下方式将拉伸的背景添加到我的UIView:

[diagramBase addSubview:[self addTileBackgroundOfSize:diagramBase.frame 
andType:@"ipad_diagram_border.png"]];
Run Code Online (Sandbox Code Playgroud)

哪个调用此方法:

- (UIImageView *) addTileBackgroundOfSize:(CGRect)frame 
andType:(NSString *)type
{
frame.origin.x = 0.0f;
frame.origin.y = 0.0f;

UIImageView *backgroundView = [[UIImageView alloc] initWithFrame:frame];
UIImage *image = [UIImage imageNamed:type];
UIEdgeInsets insets = UIEdgeInsetsMake(10.0f, 10.0f, 10.0f, 10.0f);
UIImage *backgroundImage = [image resizableImageWithCapInsets:insets];
backgroundView.image = backgroundImage;

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

实际的printcreen是用这个方法完成的(RINDiagramView是我的子类UIView的名字,我正在截取它的截图).旋转是在那里,因为我需要在保存时旋转图像,但我注释掉那部分,这不是背景的行为怪异.

- (UIImage *) createSnapshotOfView:(RINDiagram *) view
{
CGRect rect = [view bounds];
rect.size.height = rect.size.height - 81.0f;
UIGraphicsBeginImageContextWithOptions(rect.size, YES, 0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
[view.layer renderInContext:context]; …
Run Code Online (Sandbox Code Playgroud)

objective-c uiview ipad ios cgcontextref

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

简单C如果声明

我做了一个非常简单的C程序,它应该计算一个字符串中有多少个字符和单词(我通过检查文本中有多少个空格来计算单词).当前代码如下(没有'printf'来保持更短):

int main(int argc, char *argv[])
{
    int character;
    int words, characters = 0;
    while ((character = getchar()) != '\n') {
        characters = ++characters;
        if ((character == ' ') || (character == '\d')) {
            words = ++words;
        } 
    } 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是计算单词不起作用.我得到了一个准确的字符数,但是单词总是给我2293576,我不能为世界找出原因.

有人可以帮我解决这个谜吗?

谢谢你的所有答案; 我非常感谢你的帮助.

抱歉,如果我的原始技能让你的头脑受伤了.我是初学者,但希望快速提高.

c

2
推荐指数
1
解决办法
313
查看次数

我的C代码中的逻辑错误

我是初学者,只是学习C; 所以,请耐心等待我.

我正在尝试编写一个非常简单的程序,它通过一个字符串,计算每个单词中的字符,然后用它们的字符数替换这些单词.我的问题是我陷入无限循环,无法弄清楚原因!这是代码:

#define NEWLINE '\n'
#define SPACE ' '

int main(int argc, char *argv[]) {
  int character;
  int count = 0;

  printf("\nType in a sentence of any lenght, then hit ENTER!\n");
  character = getchar();

  while (character != NEWLINE) {

     while ((character != SPACE)  || (character != NEWLINE)) {
        count++;
        character = getchar();
     }

  printf("%d ", count); 
  count = 0;

  if (character != NEWLINE) {
     character = getchar();
     }
  }  

 printf("\n");
 system("PAUSE"); 
 return 0;
 }
Run Code Online (Sandbox Code Playgroud)

感谢所有帮助过我的人!我想我会回去学习逻辑运算符.

c

2
推荐指数
1
解决办法
1190
查看次数

使用Tap Gesture识别器传递参数

之前曾以某种形式提出过这个问题,但我找不到适合我情况的答案.

简而言之:我正在为我的应用程序构建一个库模块.它由几个部分组成,每个部分都有许多缩略图.基本原则是图像查看器模块基于用户所在的部分以及他或她所使用的缩略图来模态地呈现和呈现.似乎很简单; 我需要的是在初始化图像查看器时传递两个int变量(一个用于剖面,一个用于图像),并且一切都是hunky-dory.

问题是UITapGestureRecognizer无法直接调用方法.它使用选择器,通过它我无法传递参数,更不用说两个了.我要找的是这样的:

[thumbnail004 setUserInteractionEnabled:YES];
UITapGestureRecognizer *tap004 = [[UITapGestureRecognizer alloc] 
                       initWithTarget:self
                       action:@selector(imageTappedWithSectionNumber:6
                                                      andImageNumber:4)];
[thumbnail004 addGestureRecognizer:tap004];
Run Code Online (Sandbox Code Playgroud)

有没有办法在使用UITapGestureRecognizer时直接使用参数调用方法?

如果没有,解决这个问题的一个明显方法是为每个图像点击创建单独的方法,如:

- (void) image1_1Tapped { 
  // View initialization by passing 1 and 1
  }
- (void) image1_2Tapped { 
  // View initialization by passing 1 and 2
  }
And so on...
Run Code Online (Sandbox Code Playgroud)

这是可能的,因为图像库不是动态的,但是,它将是世界上最丑陋的代码,我想不惜一切代价避免使用它.

必须有一个方法来做一个干净优雅的代码...!

进一步参考:1.我不使用IB; 我以编程方式做所有事情.传递一个论点是不够的; 我真的需要通过两个.

iphone argument-passing ios uitapgesturerecognizer

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

显示来自 URL 的图像,Swift 4.2

我是一个相当不错的 Objective C 开发人员,我现在正在学习 Swift(我发现其中非常困难,不仅因为新概念,例如可选,还因为 Swift 不断发展,而且许多可用的教程都是严重过时)。

目前,我正在尝试将 JSON 从 url 解析为 NSDictionary,然后使用其值之一来显示图像(这也是一个 url)。像这样的东西:


URL -> NSDictionary -> 从 url 初始化 UIImage -> 在 UIImageView 中显示 UIImage


这在 Objective C 中很容易(甚至可能有更短的答案):

NSURL *url = [NSURL URLWithString:@"https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY"];
NSData *apodData = [NSData dataWithContentsOfURL:url];
NSDictionary *apodDict = [NSJSONSerialization JSONObjectWithData:apodData options:0 error:nil];
Run Code Online (Sandbox Code Playgroud)

上面的代码片段给了我一个标准的 NSDictionary,我可以在其中引用“url”键来获取我想要显示的图像的地址:


“网址”:“ https://apod.nasa.gov/apod/image/1811/hillpan_apollo15_4000.jpg


然后我将其转换为 UIImage 并将其提供给 UIImageView:

NSURL *imageURL = [NSURL URLWithString: [apodDict objectForKey:@"url"]];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage *apodImage = [UIImage imageWithData:imageData];

UIImageView *apodView = [[UIImageView alloc] initWithImage: …
Run Code Online (Sandbox Code Playgroud)

json nsdictionary ios swift

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